? 一、查找發(fā)現(xiàn) findding/discovering devices
??? 對于Android查找發(fā)現(xiàn)藍牙設備使用BluetoothAdapter類的startDiscovery()方法就可以執(zhí)行一個異步方式獲取周邊的藍 牙設備,因為是一個異步的方法所以我們不需要考慮線程被阻塞問題,整個過程大約需要12秒時間,這時我們緊接著注冊一個 BroadcastReceiver 對象來接收查找到的藍牙設備信息,我們過濾ACTION_FOUND這個 Intent動作來獲取每個遠程設備的詳細信息,通過附加參數(shù)在Intent字段EXTRA_DEVICE 和 EXTRA_CLASS, 中包含了每個BluetoothDevice 對象和對象的該設備類型 BluetoothClass ,示例代碼
private final BroadcastReceiver cwjReceiver = new BroadcastReceiver() {
??? public void onReceive(Context context, Intent intent) {
??????? String action = intent.getAction();
?????????? if (BluetoothDevice.ACTION_FOUND.equals(action)) {
???????????? BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
???????????? myArrayAdapter.add(device.getName() " android123 " device.getAddress()); //獲取設備名稱和mac地址
??????? }
??? }
};
// 注冊這個 BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(cwjReceiver, filter);
?最后android123提醒大家需要注意的是,記住在Service或Activity中重寫onDestory()方法,使用unregisterReceiver方法反注冊這個BroadcastReceiver對象保證資源被正確回收。
?一些其他的狀態(tài)變化有 ACTION_SCAN_MODE_CHANGED 額外參數(shù) EXTRA_SCAN_MODE 和 EXTRA_PREVIOUS_SCAN_MODE以及SCAN_MODE_CONNECTABLE_DISCOVERABLE、 SCAN_MODE_CONNECTABLE和SCAN_MODE_NONE, 藍牙模塊