2つのAndroidデバイスをBluetooth経由で接続する際に問題が発生しています。私はサーバーとクライアントの両方を実行しています。既にペアリングされているデバイスとAndroid Bluetooth accept()/ connect()
- チェック、各種のBluetoothのステータス(使用可能なアダプタ、有効になっている、など):ここで は、サーバー側で、物事の順序です。
- 私が選んだあらかじめ定義されたUUIDでlistenUsingRfcommWithServiceRecord()を呼び出します。
- デバイスを発見可能にする要求
- 私はaccept()を呼び出して着信接続を待つため、非同期でディスカバリが発生するためです。
クライアント側:
- チェック、各種のBluetoothステータス(利用可能なアダプタなど、有効になっています)。
- getBondedDevices()のデバイスごとに、getName()とサーバーの名前を比較します。一致する場合は、手順6に進みます。
- 開始BT検出
- 検出された各デバイス(2aのペアデバイスはここに表示されません)に、デバイス名とサーバー名を比較します。一致するものがある場合は、手順6に進みます。
- 検出をキャンセルします。
- 手順2で検出されたデバイス上で、サーバー側で使用されたのと同じ定義済みのUUIDでcreateRfcommSocketToServiceRecord()を呼び出します。
- connect()を呼び出し、接続されたソケットを返すのを待ちます。
上記のプロセスは、クライアントとサーバーが以前にペア設定されていない場合には問題なく動作します。しかし、Androidがデバイスリストに登録した後、必然的にconnect()/ accept()ステージでタイムアウトになります。
私は今、数日のためのソリューションを探していると、この1を含むかなりの数のことを試してみました: Connecting to a already paired Bluetooth device
反射法はどちらか私のために動作しません。 connect()はすぐに戻りますが、getOutputStream()を試行したときに例外が発生します。 accept()側では、誰かが接続しようとしたことを登録していません。私は真剣に彼らが以前にペア設定されている接続を確立するためにデバイスを取得する上でいくつかの助けやポインタが必要です。ここで
はデバイスに関するいくつかの情報は次のとおりです。
- 私は2台のLG G2Xの携帯電話上のサーバーとクライアントをテストしています。
- 両方ともAPIレベル10に対応するAndroid 2.3.3で動作します。
- 上記の設定は、手動で設定を解除した後も機能します。
ありがとうございます。私はAndroidとBluetoothの2週間ぐらいです。欠落している手順やベストプラクティスがある場合は、それらも指摘してください。
getRemoteDeviceはあなたが常に – raja
それを呼び出しているかの静的メソッドではない(ほとんど?)あなたのBluetoothAdapterとしてBluetoothAdapter.getDefaultAdapter()を使用します。上記は擬似コードなので、単純にコピー&ペーストすることはできません。 –
素晴らしい投稿ですが、これは実際には意味があります。デバイスがリファレンスであり、古くなるからです。アダプターは常に更新されます。 – Cookster