【问题标题】:Android Bluetooth Connection - Service Discovery FailedAndroid 蓝牙连接 - 服务发现失败
【发布时间】:2012-08-18 23:39:24
【问题描述】:

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

我从 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。

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

【问题讨论】:

    标签: java android sockets bluetooth ioexception


    【解决方案1】:

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

    BluetoothSocket sock = bdevice.createRfcommSocketToServiceRecord(VALID_UUID);
    

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

    See here

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我已经在应用这些代码示例,但结果始终相同。
      【解决方案3】:

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

      这可能会有所帮助:

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

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

      希望这会有所帮助。

      【讨论】:

      • 我正在处理这个问题,但仍然无法正常工作,我认为我做错了什么。感谢您的关注。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        clientSocket.connect()
        

        我需要打电话

        btAdapter.cancelDiscovery()
        

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

        【讨论】:

          【解决方案6】:

          以下代码 sn-p 适用于我。试试吧……

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

          【讨论】:

          • 苦苦挣扎了好几个小时,而您的“mmDevice.getUuids()[0].getUuid()”解决了我的问题。现在我需要了解您的“if(temp)”逻辑
          【解决方案7】:

          它对我有用

          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-02-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多