4

我正在尝试使用蓝牙 SPP 为医疗设备开发 Android 应用程序。我的 Android 应用程序用作蓝牙服务器。问题是医疗设备 (UA-767PBT) 可能不符合 SDP 流程并使用固定端口号进行连接。因此,只有在重新启动 Android 设备后才能连接。

我正在寻找使用 Java 反射创建具有特定 rfcomm 通道/端口# 的蓝牙服务器端套接字的方法。

我发现一些代码使用 Java 反射做类似的事情:

  1. 创建具有特定端口#的蓝牙客户端套接字。

    //Instead of using createRfcommSocketToServiceRecord 
    Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
    
    // using port#1 / channel #1
    clientSocket = (BluetoothSocket)m.invoke(mmDevice, Integer.valueOf(1)); 
    
  2. 检查蓝牙服务器端套接字中使用的端口号。

    BluetoothServerSocket serverSocket;
    BluetoothSocket socket;
    int port;
    
    serverSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(SERVICE_NAME, DEVICE_UUID);
    
    Field mSocketField = BluetoothServerSocket.class.getDeclaredField("mSocket");
    mSocketField.setAccessible(true);
    socket = (BluetoothSocket) mSocketField.get(serverSocket);
    mSocketField.setAccessible(false);
    
    Field mPortField = BluetoothSocket.class.getDeclaredField("mPort");
    mPortField.setAccessible(true);
    port = (Integer) mPortField.get(socket); 
    mPortField.setAccessible(false);
    
    Log.d("BT Server:", "The random port#: " + port);
    
    socket = serverSocket.accept();
    

创建具有特定端口号的蓝牙服务器端套接字。如何?

我还为这个连接问题寻求其他解决方案。

4

0 回答 0