2

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 に直接統合しました。

4

1 に答える 1