7

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

我从 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 蓝牙:服务发现失败,连接到台式机/笔记本电脑

在 Android 上使用蓝牙的服务发现失败异常

无法在 Android ICS 上进行蓝牙连接

Android蓝牙java.io.IOException:连接被拒绝?

顺便说一句,我正在开发 android ics 4.0.4。

我知道这不是设备问题,因为我已经在不同的设备上尝试过这个应用程序。

4

7 回答 7

5

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

于 2012-09-14T09:10:24.407 回答
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();
于 2014-03-05T09:25:09.430 回答
2

以下代码片段适用于我。尝试一下...

BluetoothDevice mmDevice;
boolean temp = mmDevice.fetchUuidsWithSdp();
UUID uuid = null;
if( temp ){
uuid = mmDevice.getUuids()[0].getUuid();
}
tmp = device.createRfcommSocketToServiceRecord(uuid);
于 2013-06-04T17:52:02.223 回答
1

我经历了类似的学习过程。我试图用一系列例子记录我学到的东西。

这可能会有所帮助:

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

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

希望这可以帮助。

于 2012-08-28T03:08:50.210 回答
1

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

clientSocket.connect()

我需要打电话

btAdapter.cancelDiscovery()

这帮助我解决了同样的问题Matts Reco

于 2012-10-25T23:54:24.907 回答
0

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

BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID);

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

看这里

于 2012-08-23T18:40:42.573 回答
0

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

于 2012-08-23T18:49:00.317 回答