Android蓝牙连接 - 服务发现失败

时间:2012-08-23 12:45:46

标签: java android sockets bluetooth ioexception

我正在尝试创建一个基本的蓝牙应用程序,用于测试设备。

我从developer.android获得了代码。这是链接:http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices

这是我的线程代码的一部分:

     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;
        }

无论我尝试过什么mmSocket.connect();都无法运作。始终抛出IOException并从logcat中获取该日志:

java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:403)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:213)

我看了这些文章,并尝试了写过的东西,但没有一个能解决我的问题。

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?

顺便说一句,我正在研究android ics 4.0.4。

我知道这不是设备问题,因为我在不同设备上尝试过此应用。

7 个答案:

答案 0 :(得分:5)

我不知道,我仍然不理解UUID的东西,但问题是UUID。我正在使用从内核日志中获取的UUID,它是00001105-0000-1000-8000-00805F9B34FB

答案 1 :(得分:5)

它为我工作

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 :(得分:2)

以下代码段对我有用。试试吧......

BluetoothDevice mmDevice;
boolean temp = mmDevice.fetchUuidsWithSdp();
UUID uuid = null;
if( temp ){
uuid = mmDevice.getUuids()[0].getUuid();
}
tmp = device.createRfcommSocketToServiceRecord(uuid);

答案 3 :(得分:1)

我通过类似的学习过程。我试图记录我在一系列例子中学到的东西。

这个可能会有所帮助:

http://digitalhacksblog.blogspot.com/2012/05/android-example-bluetooth-simple-spp.html

用于通过蓝牙在Android设备和PC之间建立简单连接。这些示例包含Android文件以及java中的SPP服务器和PC中的一个perl文件。

希望这有帮助。

答案 4 :(得分:1)

确保您的应用在适配器忙于发现时没有尝试连接: 问题似乎是在我打电话之前

clientSocket.connect()

我需要致电

btAdapter.cancelDiscovery()

这有助于我解决同样的问题Matts Reco

答案 5 :(得分:0)

您必须为服务发现提供有效的UUID。

BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID);

对于各种标准(默认)蓝牙服务(免提,文件传输等),有几种常见的UUID。

See here

答案 6 :(得分:0)

如果您只是尝试测试设备,请尝试使用作为SDK一部分提供的蓝牙聊天示例项目。您尝试使用的代码和developer.android.com上提供的代码都包含在蓝牙聊天示例中。