4

Bluetooth SPP を使用して医療機器用の Android アプリケーションを開発しようとしています。私の Android アプリケーションは Bluetooth サーバーとして動作します。問題は、医療機器 (UA-767PBT) が SDP プロセスに準拠していない可能性があり、接続に固定のポート番号を使用することです。そのため、接続は Android デバイスの再起動後にのみ機能します。

Java リフレクションを使用して、特定の rfcomm チャネル/ポート番号を持つ Bluetooth サーバー側ソケットを作成する方法を探しています。

Java リフレクションを使用して同様のことを行うコードをいくつか見つけました。

  1. 特定のポート番号で 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)); 
    
  2. 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 サーバー側ソケットを作成します。どのように?

この接続の問題に対する他の解決策も探しています。

4

0 に答える 0