我正在尝试使用蓝牙 SPP 为医疗设备开发 Android 应用程序。我的 Android 应用程序用作蓝牙服务器。问题是医疗设备 (UA-767PBT) 可能不符合 SDP 流程并使用固定端口号进行连接。因此,只有在重新启动 Android 设备后才能连接。
我正在寻找使用 Java 反射创建具有特定 rfcomm 通道/端口# 的蓝牙服务器端套接字的方法。
我发现一些代码使用 Java 反射做类似的事情:
创建具有特定端口#的蓝牙客户端套接字。
//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));
检查蓝牙服务器端套接字中使用的端口号。
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();
创建具有特定端口号的蓝牙服务器端套接字。如何?
我还为这个连接问题寻求其他解决方案。