Bluetooth の検出

Bluetooth 接続履歴のあるデバイス情報取得は、

  BluetoothAdapter badapter = BluetoothAdapter.getDefaultAdapter();
  Set<BluetoothDevice> set = badapter.getBondedDevices();

で一括取得できるが、新たにスキャンして検出するには、Bluetooth をONにする時と同様に
Broadcast 受信で検知する。

しかもこのBroadcast 受信での検出は、機種の差があるかどうかよく知らないが、
約10秒もかかる。


class ScanBroadcastReceiver extends BroadcastReceiver{
   @Override
   public void onReceive(Context context,Intent intent){
      String action = intent.getAction();
      if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)){
         // スキャン開始のプログレス表示などを行う

      }else if(action.equals(BluetoothDevice.ACTION_NAME_CHANGED)){
         // 新規の検出
         BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

      }else if(action.equals(BluetoothDevice.ACTION_FOUND)){
         // 既知の検出
         BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

      }else if(action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)){
         // スキャン終了、表示していたプログレスなどは消す
         // 何らかの処理

      }
   }
}

以下のように、フィルタを用意して準備を行う。

BroadcastReceiver broadcastReceiver = new ScanBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothDevice.ACTION_NAME_CHANGED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

registerReceiver(broadcastReceiver,sfilter);

準備できたら、、

BluetoothAdapter.getDefaultAdapter().startDiscovery();