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();