I am having trouble connecting two Android devices via Bluetooth, which happens only when they have been paired before. I am running one as the server and the other as the clien
Check out this example: http://developer.android.com/resources/samples/BluetoothChat/index.html.
this could explain how the bluetooth device connected and trans informations.
In the client when I attempt to make a connection to a bonded device, I simply called it on the BluetoothDevice I found in BluetoothAdapter.getBondedDevices()
. This does NOT work.
In order to properly establish the Bluetooth connection, I had to do something similar to the pseudocode below:
BluetoothDevice bonded = a device from BluetoothAdapter.getBondedDevices();
BluetoothDevice actual = BluetoothAdapter.getRemoteDevice(bonded.getAddress());
BluetoothSocket socket = actual.createRfcommSocketToServiceRecord(SOME_UUID);
socket.connect();
I arrived this answer by following exactly the Bluetooth chat example: Bluetooth Chat Service. Why it doesn't work on the device from getBondedDevices()
is beyond me. Maybe someone with more intimate knowledge of Android can answer that.
private static BluetoothSocket mSocket;
BluetoothDevice selectDevice = null;
void connectDevice(){
if(mSocket == null) {
//Log.d(TAG, "Socket is null");
UUID SPP_UUID = UUID
.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");
Set<BluetoothDevice> bondedDevices = BluetoothAdapter
.getDefaultAdapter().getBondedDevices();
//Log.d(TAG, "Size: " + bondedDevices.size());
/**
* Select your divice form paired devices
*/
for (BluetoothDevice bluetoothDevice : bondedDevices) {
selectDevice = bluetoothDevice;
//Log.d(TAG, bluetoothDevice.getName()+" "+bluetoothDevice.getAddress());
}
if(selectDevice.getBondState() == selectDevice.BOND_BONDED) {
//Log.d(TAG, selectDevice.getName());
try {
mSocket = selectDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID);
} catch (IOException e1) {
// TODO Auto-generated catch block
//Log.d(TAG, "socket not created");
e1.printStackTrace();
}
try {
mSocket.connect();
} catch (IOException e) {
try {
mSocket.close();
//Log.d(TAG, "Cannot connect");
} catch (IOException e1) {
//Log.d(TAG, "Socket not closed");
e1.printStackTrace();
}
}
}