Bluetooth SPP を使用して医療機器用の Android アプリケーションを開発しようとしています。私の Android アプリケーションは Bluetooth サーバーとして動作します。問題は、医療機器 (UA-767PBT) が SDP プロセスに準拠していない可能性があり、接続に固定のポート番号を使用することです。そのため、接続は Android デバイスの再起動後にのみ機能します。
Java リフレクションを使用して、特定の rfcomm チャネル/ポート番号を持つ Bluetooth サーバー側ソケットを作成する方法を探しています。
Java リフレクションを使用して同様のことを行うコードをいくつか見つけました。
特定のポート番号で Bluetooth クライアント側ソケットを作成します。
//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));
Bluetooth サーバー側ソケットで使用されるポート番号を調べます。
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();
特定のポート番号で Bluetooth サーバー側ソケットを作成します。どのように?
この接続の問題に対する他の解決策も探しています。