在Android上进行蓝牙连接时应选择哪个UUID?

3
目前我正在开发一个新的Android应用程序。我需要蓝牙来支持这个应用程序。每次我想通过serversocket/socket系统连接两个(配对的)设备时,我都无法创建一个可用的socket。它总是返回:
java.io.IOException: read failed, socket might closed or timeout, read ret: -1

所以我的问题是:我使用了无效的UUID吗?如果不是这种情况,你有什么其他建议可能出了问题?
public Accept(BluetoothAdapter bt, BluetoothDevice device, Context context) {
            try {
                BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
                BluetoothServerSocket tmp = null;
                try {
                    UUID uuid = UUID.fromString("00001101-0000-1000-8000-00294F9B3423");
    //Here is the point when it doesn't work...
                    tmp = bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid);
                } catch (Exception e) {
                }
                mmServerSocket = tmp;

                bt_device = device;
            } catch (Exception e) {
            }
        }

事先感谢您的帮助。
1个回答

0

我认为你在这里缺少了accept语句。 在listen之后,你的下一个语句应该是tmp.accept()。这将解决你的问题。所以,你的代码应该像这样:

    try { 
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00294F9B3423"); 
Bluetoothsocket clientSocket;
//Here is the point when it doesn't work... 
tmp = bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid); 
clientSocket = tmp.accept();
}

另外,需要注意的是,接受函数调用是阻塞代码。
希望这可以帮到你。

首先,非常感谢您的回复。但很抱歉这并没有解决我的问题。我可能没有给您足够的代码。我的代码基本上看起来像您在这里看到的:[链接](https://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingAsAServer)所以我将其作为一个线程处理。我在该线程的run()方法中调用accept()方法。 - Swittmann
但是,一旦我调用此方法bt.listenUsingRfcommWithServiceRecord(context.getResources().getString(R.string.bt_string_for_profile_image), uuid);,serversocket的通道就是-1,所以我认为这个方法可能有问题? - Swittmann
哦,对不起,我不知道你的完整代码……现在,你可以在这里做的第一件事是检查listen函数返回的错误代码/异常。这将帮助我们了解错误的原因。根据你提供的链接,只有在以下情况下listen函数才会抛出异常:“发生错误,例如蓝牙不可用、权限不足或通道正在使用。” - aksonlyaks
另外,你可以尝试这个UUID:00001101-0000-1000-8000-00805F9B34FB。 - aksonlyaks
1
我很高兴地说,我设法解决了我的问题。不幸的是,我无法准确告诉你我是如何做到的。但我真的想感谢你为我花费的所有时间。非常感谢你。如果我将来遇到蓝牙应用程序的另一个问题,我会再次向你求助,如果可以的话。再次感谢你。 - Swittmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接