2011-07-06 22 views
3

私はrfcommを介して外部アクセサリーと話すプログラムを書いています。 私の問題は、自分のデバイスを識別する正しい方法が何であるか分かりません。私は今それを行う 方法は、このようなものです:AndroidのBluetooth - 正しいBluetoothデバイスに接続するにはどうすればいいですか?

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter 
       .getBondedDevices(); 
     for (BluetoothDevice device : pairedDevices) { 
      if (device.getName().equals(MY_DEVICE_NAME)) { 
       this.myDevice = device; 
       break; 
      } 
     } 

この方法は、しかし、私に汚いと悪いようだデバイス:) の名前に依存しているこれを行うには良い方法はありますか? 私はBluetoothDeviceのすべての方法を見てみましたが、誰も助けてくれないようでした。名前は本当にそれを行う最良の方法ですか?

  _socket = myDevice.createRfcommSocketToServiceRecord(MY_UUID); 

それを行うには良い方法があります: 私はいくつかの場所で、人々は、私はそれを持っていたら、私はUUIDを使用する必要がありますが、それは、デバイスへのソケットを開くために使用されていることを言っているのを見ましたか?

答えて

0

あなたは通常、類似した名前を持つことになります(名前とは違って)それは常に一意になり、Bluetoothデバイスのアドレスを取得し、比較するために、同じ種類/機能および/またはブランドの

+0

特定のクラスのデバイス(jabraヘッドセットの特定のモデル)に接続しようとしています。そのため、アドレスはあらかじめわかっていません。私はdevice.getBluetoothClass()のようなものを考えていましたが、どのように動作するのかわかりません... – ekatz

+1

getBluetoothClassはデバイスのタイプとデバイスがサポートするサービスのタイプを取得します。これは、種類のデバイスにさらにフィルタリングするのに便利です。しかし、最終的には、あなたのBluetoothアドレスを取得し、接続する必要があるデバイスに接続する。 –

+0

plsは投票するか、それが有用であれば答えを受け入れます。 –

1

デバイスをmyDevice.getAddress()を使用することができます。

FireFly-XXXX 

XXXXは、デバイスのアドレスの最後の4桁です:たとえば、すべてのRN-41 devices from Roving Networksは、次の名前を持っています。それはあなたがそれらのいずれかに接続するために、次を使用できることを意味します:

 if (device.getName().startsWith("FireFly-")) { 
      this.myDevice = device; 
      break; 
     } 

これは私が私のアプリで行い、それを行うための任意のより信頼性/一貫性のある方法を発見していない、まさにです。一般化として、関心のあるデバイスの名前が上記の例より複雑な場合は、通常のパターンを使用することができます。

+0

これは私が今やっていることですが、私は名前に頼らないより良い方法があると期待していました... – ekatz

0

BluetoothDevice.getBluetoothClass()を使用して、関連するデバイスを絞り込むこともできます。

BluetoothClass.getMajorDeviceClass()は、携帯電話、コンピュータ、オーディオデバイスまたはビデオデバイスなど、どのようなデバイスであるかを大まかに示します。 BluetoothClass.hasService()は、デバイスのいくつかの機能をさらに指定します。

各主要クラスの中には、コンピュータ/オーディオビデオデバイス/電話/健康機器などの種類がいくつか定義されています。

また、最近のバージョンのAndroidプラットフォーム(APIレベル15+)では、デバイスのサービスレコードを、接続せずに照会することができます。 BluetoothDevice.fetchUuidsWithSdp()とBluetoothDevice.getUuids()を参照してください。

関連する問題