2011-08-03 23 views
2

エリア内のすべてのデバイスのリストを取得したいとします。エリア内のBluetooth対応デバイスを取得する方法

私はボンドデバイスにgetBondedDevices()をリクエストしてから、ディスカバリーを行っています。しかし、これは私にすべてのボンディングされたデバイス(エリア内であるかどうか)と発見可能なデバイスのリストを提供します。私が発見した場合(getBondedDevices()を使用しない場合)、私はそのエリアにボンディングされたデバイスを取得しません。

ボンディングされたデバイス(ただし、そのデバイスのみ)と検出可能なデバイスのリストを取得したいとします。ヘルプ

答えて

1

ため

おかげで、そのためには直接的なAPIはありません、あなたは発見/表示され、近くに結合したデバイスを見つけるために、発見とgetBondedDevicesによって返されて、その共通のデバイスを比較することができます。

1

私が持っているBluetoothデバイスは、いったんボンディングされると検出されません。そのため、検出されたBluetoothデバイスは検出されません。これはAndroid APIの制限ではなく、デバイスの性質(すでにデバイスを使用している場合はそのデバイスを使用できない)です。

エリア内のデバイスの完全なリストを取得する唯一の方法は、ボンディングされた各デバイスへの接続を開いて、そのデバイスがそのエリアにあるかどうかを確認し、そのサブセットを検出可能なリストにマージすることです。それは間接的な方法ですが、私は別の方法を見つけることができませんでした。

私は、これを扱う他のソフトウェアの方法は、ボンディングされ発見可能なリストを別々に保ち、ユーザがボンディングされたデバイス(個人的な知識によって範囲内にあることがわかっている)を判断させることです。

+0

Android 2.2では、私が発見すると、ボンディング/ペアリングされたデバイスも取得します。 Androidのどのバージョンをテストしましたか? – zeitkunst

+0

私が参照していたデバイスは、ペアになっているときに発見要求を無視します。これはAndroidとは独立しています。私はAndroid 1.6と2.2をテストしたことがありますが、Bluetooth周辺機器を使用する医療機器用に書いたファームウェアのためにこれを学びました。もちろん、これはデバイスに依存しているため、テストしたBluetoothデバイスの動作は異なります。 – Klox

+0

私はそんなやり方を試みます。実際に私のプログラムは、ブルートゥースによって他のデバイスと接続する医療アプリケーションでもあります。ユーザーは接続したいデバイスを選択する必要があります。そのため、エリアにないボンディングされたデバイスをすべて表示する必要がないように見えます。 – Nemesis

2

私がこれを解決したのは、デバイスに接続しようとすることでした。問題のデバイスが実際に接続をリッスンしている限り動作しているようです。あなたが扱っているデバイスのタイプがわからない場合は、それが提供する利用可能なサービスをスキャンする必要があります。これは、あなたがリフレクションを使用してgetUuidsを呼び出すことができるように見えるので、ちょっと変です。以下のコードを参照してください。

try { 
    Method method = device.getClass().getMethod("getUuids"); /// get all services 
    ParcelUuid[] parcelUuids = (ParcelUuid[]) method.invoke(device); /// get all services 

    BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(parcelUuids[0].getUuid()); ///pick one at random 
    socket.connect(); 
    socket.close(); 
} catch (Exception e) { 
    Log.e("BluetoothPlugin", device.getName() + "Device is not in range"); 
} 
関連する問題