RFID リーダー デバイスに接続しようとしています。BluetoothSocket を作成し、以下のように connect を呼び出すことで接続できます (多くの詳細は省略されています)。
public static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
BluetoothSocket socket = device.createRfcommSocketToServiceRecord( MY_UUID);
これは期待どおりに機能し、デバイスとの接続を確立できます。
私の問題は、デバイス API がシリアル ポートで動作するように設計されていることです。API を使用するには、次のような文字列を渡す必要があります。
String uri = "eapi:///com1";
Android は、この方法でシリアル ポートを世界に開放しているようには見えません。Linux では、次のような文字列で接続できると期待しています。
String uri = "eapi:///dev/ttyS0";
ハンドセットの /dev ディレクトリを調べても、何も表示されません。さらに、接続を確立しても /dev のエントリは変更されません。これは、Bluetooth デバイスに接続するときに Android が /dev にシリアル デバイスを作成しないと私に信じさせます。
BluetoothSocket がデバイスへの接続に使用している com ポートにアクセスするにはどうすればよいですか? Android に com1 や /dev/ttyS0 のような仮想デバイスはありますか?
クラス RfcommSocket を使用していた古いバージョンの API には、getPort() および getFileDescriptor() メソッドがあり、これが役立つ可能性があります。現在の bluetooth ソケットは、これらの詳細を隠しているようです。
前もって感謝します!
編集: Android は単にシリアル ストリーム用の仮想デバイスを作成しないことが判明しました。代わりに、クライアント コードを bluetoothsocket に直接統合しました。