2010-12-28 31 views

答えて

10

API 11(Android 3.0)からは、BluetoothAdapterを使用して、特定のBluetoothプロファイルに接続されているデバイスを検出できます。私は以下のコードを使用して、デバイスをその名前で発見しました:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() { 
     public void onServiceConnected(int profile, BluetoothProfile proxy) { 
      if (profile == BluetoothProfile.A2DP) { 
       boolean deviceConnected = false; 
       BluetoothA2dp btA2dp = (BluetoothA2dp) proxy; 
       List<BluetoothDevice> a2dpConnectedDevices = btA2dp.getConnectedDevices(); 
       if (a2dpConnectedDevices.size() != 0) { 
        for (BluetoothDevice device : a2dpConnectedDevices) { 
         if (device.getName().contains("DEVICE_NAME")) { 
          deviceConnected = true; 
         } 
        } 
       } 
       if (!deviceConnected) { 
        Toast.makeText(getActivity(), "DEVICE NOT CONNECTED", Toast.LENGTH_SHORT).show(); 
       } 
       mBluetoothAdapter.closeProfileProxy(BluetoothProfile.A2DP, btA2dp); 
      } 
     } 

     public void onServiceDisconnected(int profile) { 
      // TODO 
     } 
    }; 
mBluetoothAdapter.getProfileProxy(context, mProfileListener, BluetoothProfile.A2DP); 

これはすべてのBluetoothプロファイルで可能です。 AndroidガイドでWorking with profilesをご覧ください。

しかし、他の回答に記載されているように、ブロードキャスト受信者を登録して接続イベントを聞くことができます(Androidの< 3.0で作業しているときなど)。

9

任意のAPIを呼び出して、接続されているデバイスのリストを取得することはできません。 代わりに、デバイスが接続または切断されていることを通知するACTION_ACL_CONNECTED、ACTION_ACL_DISCONNECTEDの意図を聞く必要があります。 接続されたデバイスの初期リストを取得する方法はありません。

私のアプリでこの問題がありました。私はそれを処理しています(良くはありませんでした)。アプリケーションの起動時にBluetoothをオフ/オンにして、接続されているデバイスの空のリストから開始してください上記の意図に耳を傾けてください。

+2

BluetoothはAPI 16(API 19ではBluetoothManagerが導入され、非常にうまくいっている)から改良されていますが、古いAPIレベルの場合はこれが適切な解決策です。 –

1

muslidrikkさんの回答は大体正しいです。しかし、代わりにfetchUUIDsWithSDP()を使用して、戻ってくるものを見ることができます。これはちょっとハックですが、電源が入っていればデバイスから期待できるUUID(能力)を知る必要があります。それは保証するのが難しいかもしれません。あなたの活動で

-1

、放送受信機を定義...

// Create a BroadcastReceiver for ACTION_FOUND 
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    // When discovery finds a device 
    if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
     // Get the BluetoothDevice object from the Intent 
     BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
     // Add the name and address to an array adapter to show in a ListView 
     mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); 
    } 
} 

};

// Register the BroadcastReceiver 

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy 
+0

あなたが提供したソリューションは、あなたがアクセスできるデバイスをスキャンします。 –

関連する問題