7
votes

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.

7

7 Answers

5
votes

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.

5
votes

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();
2
votes

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);
1
votes

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.

1
votes

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

0
votes

You'll have to provide a valid UUID for the service discovery.

BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID);

There are several common UUIDs for various standard (default) bluetooth services (Handsfree, File transfer, etc).

See here

0
votes

Try using the Bluetooth Chat sample project provided as a part of the SDK if you are just trying to test the device. That code you're trying to use and the one provided on developer.android.com are included in the Bluetooth Chat example.