3

Android 10发布了对BLE CoC 连接的支持,所以我想通过制作两个简单的应用程序来尝试这个android 10,它们可以相互连接l2Cap并交换“Hello World”。

我写了两个应用程序,服务器应用程序和客户端应用程序,它们在清单文件中都具有他们需要的所有权限,我在两部Android 10手机上运行这些应用程序,但连接没有建立。

这是我的服务器应用程序代码的相关部分:

try {
    mServerSocket = bluetoothAdapter.listenUsingInsecureL2capChannel();
    int psm = mServerSocket.getPsm();
} catch (IOException e) {
    e.printStackTrace();
}

BluetoothSocket socket = mmServerSocket.accept();

变量 int psm 是我在客户端应用程序中使用的 PSM 值。

这是我的客户端应用程序代码的相关部分:

for (BluetoothDevice bluetoothDevice : deviceSet) {
    if (!bluetoothDevice.getName().equals(PAIRED_DEVICE_NAME)) continue;
    BluetoothDevice bd = adapter.getRemoteDevice(bluetoothDevice.getAddress());
    bluetoothSocket = bd.createInsecureL2capChannel(psm_value);
    break;
}

bluetoothSocket.connect();

其中字符串PAIRED_DEVICE_NAME是预期设备的名称,由于设备已蓝牙配对,因此已成功找到。Int psm_value 是来自服务器应用程序的 PSM 值。我怀疑这可能是一个问题,因为我每次尝试测试时都从服务器硬编码了这个值(每次都是不同的值,因为这个值是动态分配的,它会持续到你关闭服务器套接字)。

所以我的问题是如何获得远程 PSM 值?以及如何连接这些设备,因为如果我使用 RFCOMM 连接,这段代码可以完美运行。使用此代码,我bluetoothSocket.connect()从客户端应用程序中收到错误消息:

java.io.IOException:读取失败,套接字可能关闭或超时,读取 ret:-1

谢谢!

4

0 回答 0