Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Bluetooth Connection - Service Discovery Failed

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.

like image 973
juliadream Avatar asked Aug 23 '12 12:08

juliadream


5 Answers

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.

like image 192
juliadream Avatar answered Oct 06 '22 00:10

juliadream


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();
like image 40
sandeepmaaram Avatar answered Oct 06 '22 01:10

sandeepmaaram


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);
like image 33
Prasanth Avatar answered Oct 06 '22 01:10

Prasanth


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.

like image 20
digitalhack Avatar answered Oct 06 '22 01:10

digitalhack


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

like image 28
user1202714 Avatar answered Oct 06 '22 01:10

user1202714