I'm trying to create a basic bluetooth application, for testing the device.
I got the code from developer.android. Here is the link : http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices
Here is run part of my thread code:
public void run() {
mBluetoothAdapter.cancelDiscovery();
Log.i(TAG, "Discovery Cancel!");
try {
Log.i(TAG, "Connection Started");
mmSocket.connect();
Log.i(TAG, "Connection Ended");
} catch (IOException e) {
try {
Log.e(TAG, "Connection Failed", e);
mmSocket.close();
} catch (IOException e2) {
Log.e(TAG, "Connection Close Failed", e2);
}
return;
}
Whatever I have tried mmSocket.connect();
never works. Always throws an IOException and I get that log from my logcat:
java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:403)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:213)
I've looked at these articles, and tried the written things, none of them has solved my problem.
Android Bluetooth: Service Discovery Failed, connection to Desktop/Laptop
Service discovery failed exception using Bluetooth on Android
Bluetooth connection on Android ICS not possible
Android Bluetooth java.io.IOException: Connection refused?
Btw I'm working on android ics 4.0.4.
I know that is not device problem, cause I've tried this app on different devices.
I don't know and I still don't understand the UUID stuff but the problem was the UUID. I'm using the UUID which I got from the kernel logs and it is 00001105-0000-1000-8000-00805F9B34FB
.
Its working for me
BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class});
socket = (BluetoothSocket) m.invoke(device, 1);
bluetoothAdapter.cancelDiscovery();
socket.connect();
The following code snippet works for me. Try it...
BluetoothDevice mmDevice;
boolean temp = mmDevice.fetchUuidsWithSdp();
UUID uuid = null;
if( temp ){
uuid = mmDevice.getUuids()[0].getUuid();
}
tmp = device.createRfcommSocketToServiceRecord(uuid);
I worked through a similar learning process. I have tried to document what I learned in a series of examples.
This one might be of help:
http://digitalhacksblog.blogspot.com/2012/05/android-example-bluetooth-simple-spp.html
It is for setting up a simple connection between an Android device and a PC via bluetooth. The examples contain the Android files as well as an SPP server in java and one in perl for the PC.
Hope this helps.
Make sure that your app is not trying to connect while the adapter is busy with discovery: It appears the problem was that before I called
clientSocket.connect()
I needed to call
btAdapter.cancelDiscovery()
This helped solve the same problem for me Matts Reco
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With