Google が提供する Bluetooth Chat サンプル API アプリを使用して、別のデバイスに接続された Bluetooth RS232 アダプターに接続しようとしています。参考にしたアプリはこちら
http://developer.android.com/resources/samples/BluetoothChat/index.html
参考までに、RS232 コネクタのスペック シートを次に示します。
http://serialio.com/download/Docs/BlueSnap-guide-4.77_Commands.pdf
問題は、次の方法でデバイスに接続するときです。
mmSocket.connect(); (BluetoothSocket::connect())
メソッドによって常にIOException
エラーがスローされますconnect()
。例外を実行するtoString
と、「サービスの検出に失敗しました」というメッセージが表示されます。私の質問は、ほとんどの場合IOException
、接続メソッドでスローされる原因は何ですか? それらがソースのどこかにあることは知っていますが、アプリを作成する Java レイヤーと、実際のスタック インターフェイスを含む C/C++ レイヤーがどのようになっているのか正確にはわかりません。C / C ++で記述されたbluez bluetoothスタックを使用していることは知っていますが、例外をスローしていると思われるJavaレイヤーにどのように結びついているかはわかりません。この問題を分析できる場所を教えていただけると助かります。
また、RS232 アダプターとは正常にペアリングできますが、実際に接続することはできません。詳細な参照用の logcat 出力は次のとおりです。
I/ActivityManager( 1018): 表示されたアクティビティ com.example.android.BluetoothChat/.DeviceListActivity: 326 ms (合計 326 ms) E/BluetoothService.cpp(1018): stopDiscoveryNative: StopDiscovery での D-Bus エラー: org.bluez.Error.Failed (無効な検出セッション) D/BluetoothChat(1729): onActivityResult -1 D/BluetoothChatService( 1729): 接続先: 00:06:66:03:0C:51 D/BluetoothChatService(1729): setState() STATE_LISTEN -> STATE_CONNECTING E/BluetoothChat( 1729): + 再開時 + 私/Bluetooth チャット (1729): MESSAGE_STATE_CHANGE: STATE_CONNECTING I/BluetoothChatService(1729): BEGIN mConnectThread E/BluetoothService.cpp(1018): stopDiscoveryNative: StopDiscovery での D-Bus エラー: org.bluez.Error.Failed (無効な検出セッション) E/BluetoothEventLoop.cpp( 1018): event_filter: 信号 org.bluez.Device:PropertyChanged を /org/bluez/1498/hci0/dev_00_06_66_03_0C_51 から受信しました I/BluetoothChatService(1729): 接続に失敗しました: java.io.IOException: サービスの検出に失敗しました D/BluetoothChatService(1729): setState() STATE_CONNECTING -> STATE_LISTEN D/BluetoothChatService(1729): 開始 D/BluetoothChatService(1729): setState() STATE_LISTEN -> STATE_LISTEN 私/Bluetooth チャット (1729): MESSAGE_STATE_CHANGE: STATE_LISTEN V/BluetoothEventRedirector( 1080): android.bleutooth.device.action.UUID を受け取りました I/NotificationService( 1018): enqueueToast pkg=com.example.android.BluetoothChat コールバック=android.app.ITransientNotification$Stub$Proxy@446327c8 duration=0 私/Bluetooth チャット (1729): MESSAGE_STATE_CHANGE: STATE_LISTEN E/BluetoothEventLoop.cpp( 1018): event_filter: 信号 org.bluez.Device:PropertyChanged を /org/bluez/1498/hci0/dev_00_06_66_03_0C_51 から受信しました V/BluetoothEventRedirector( 1080): android.bleutooth.device.action.UUID を受け取りました
接続しようとしているデバイスは、00:06:66:03:0C:51
スキャンして明らかにペアリングできるデバイスです。
以下は、ここで選択した回答によって正常に解決された同様の質問からマージされています。
Androidで別の電話以外のrfcommデバイスに接続するにはどうすればよいですか?
Android API は、listenUsingRfcommWithServiceRecord() を使用してソケットをセットアップし、createRfcommSocketToServiceRecord() を使用してそのソケットに接続する例を提供します。
BlueSMiRF Goldチップを搭載した組み込みデバイスに接続しようとしています。Android に移植したい私の作業 Python コード ( PyBluezライブラリを使用) は次のとおりです。
sock = bluetooth.BluetoothSocket(proto=bluetooth.RFCOMM)
sock.connect((device_addr, 1))
return sock.makefile()
...したがって、接続するサービスは、SDP ルックアップなしで、単純にチャネル 1 として定義されます。
私が Android API で目にする唯一の文書化されたメカニズムは、UUID の SDP ルックアップを行うため、少し途方に暮れています。Linux ホストから「sdptool browse」を使用すると何も表示されないため、問題のチップには SDP サポートが欠けていると推測されます。