6

Bluetooth経由で2つのAndroidデバイスを接続するのに問題があります。これは、以前にペアリングされた場合にのみ発生します。1つをサーバーとして実行し、もう1つをクライアントとして実行しています。

サーバー側のシーケンスは次のとおりです。

  1. さまざまなBluetoothステータス(アダプターが使用可能、有効など)を確認します。
  2. 選択した事前定義されたUUIDを使用してlistenUsingRfcommWithServiceRecord()を呼び出します。
  3. デバイスを検出可能にするためのリクエスト
  4. 検出可能になるのは非同期であるため、accept()を呼び出して、着信接続を待ちます。

クライアント側:

  1. さまざまなBluetoothステータス(アダプターが使用可能、有効など)を確認します。
  2. getBondedDevices()の各デバイスについて、getName()をサーバーの名前と比較します。一致する場合は、手順6に進みます。
  3. BTディスカバリーを開始
  4. 検出されたデバイスごとに(2aのペアリングされたデバイスはここには表示されないことに注意してください)、デバイス名をサーバーの名前と比較します。一致する場合は、手順6に進みます。
  5. 発見をキャンセルする
  6. 手順2で見つかったデバイスで、サーバー側で使用されたものと同じ事前定義されたUUIDを使用してcreateRfcommSocketToServiceRecord()を呼び出します。
  7. connect()を呼び出し、接続されたソケットが返されるのを待ちます。

上記のプロセスは、クライアントとサーバーがこれまでペアリングされたことがない場合、私にとっては完全にうまく機能します。ただし、Androidがデバイスリストに登録した後は、connect()/ accept()段階で必然的にタイムアウトになります。

私はここ数日解決策を探していて、これを含むかなりの数のことを試しました: すでにペアリングされたBluetoothデバイスへの接続

反射法も私にはうまくいきません。connect()はすぐに戻るようですが、getOutputStream()を実行しようとすると、例外が発生します。accept()側では、誰かが接続しようとしたことさえ登録されません。以前にペアリングされたデバイスに接続を確立させるためのヘルプまたはポインターが真剣に必要です。

デバイスに関する情報は次のとおりです。

  • 2台のLGG2X電話でサーバーとクライアントをテストしています。
  • どちらもAndroid2.3.3で動作します。これは、APIレベル10に対応しています。
  • 繰り返しますが、設定でデバイスを手動でペアリング解除した後、上記は機能します。

よろしくお願いします。私はAndroidとBluetoothで約2週齢です。不足している手順やベストプラクティスを見つけた場合は、それらも指摘してください。

4

3 に答える 3

7

クライアントで、結合されたデバイスに接続しようとすると、で見つけたBluetoothDeviceで単に呼び出しましたBluetoothAdapter.getBondedDevices()。これは動作しません。

Bluetooth接続を正しく確立するために、以下の擬似コードのようなことをしなければなりませんでした。

BluetoothDevice bonded = a device from BluetoothAdapter.getBondedDevices();
BluetoothDevice actual = BluetoothAdapter.getRemoteDevice(bonded.getAddress());

BluetoothSocket socket = actual.createRfcommSocketToServiceRecord(SOME_UUID);
socket.connect();

私はBluetoothチャットの例を正確にたどることによってこの答えに到達しました:Bluetoothチャットサービス。からのデバイスで動作しない理由getBondedDevices()は私を超えています。たぶん、Androidのより深い知識を持っている人がそれに答えることができます。

于 2012-02-15T06:24:14.010 に答える
2

この例を確認してください: http://developer.android.com/resources/samples/BluetoothChat/index.html

これにより、Bluetooth デバイスがどのように接続され、情報が転送されたかを説明できます。

于 2012-03-07T22:46:16.767 に答える