? 一、查找發(fā)現(xiàn) findding/discovering devices
??? 對(duì)于A(yíng)ndroid查找發(fā)現(xiàn)藍(lán)牙設(shè)備使用BluetoothAdapter類(lèi)的startDiscovery()方法就可以執(zhí)行一個(gè)異步方式獲取周邊的藍(lán) 牙設(shè)備,因?yàn)槭且粋€(gè)異步的方法所以我們不需要考慮線(xiàn)程被阻塞問(wèn)題,整個(gè)過(guò)程大約需要12秒時(shí)間,這時(shí)我們緊接著注冊(cè)一個(gè) BroadcastReceiver 對(duì)象來(lái)接收查找到的藍(lán)牙設(shè)備信息,我們過(guò)濾ACTION_FOUND這個(gè) Intent動(dòng)作來(lái)獲取每個(gè)遠(yuǎn)程設(shè)備的詳細(xì)信息,通過(guò)附加參數(shù)在Intent字段EXTRA_DEVICE 和 EXTRA_CLASS, 中包含了每個(gè)BluetoothDevice 對(duì)象和對(duì)象的該設(shè)備類(lèi)型 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()); //獲取設(shè)備名稱(chēng)和mac地址
??????? }
??? }
};
// 注冊(cè)這個(gè) BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(cwjReceiver, filter);
?最后android123提醒大家需要注意的是,記住在Service或Activity中重寫(xiě)onDestory()方法,使用unregisterReceiver方法反注冊(cè)這個(gè)BroadcastReceiver對(duì)象保證資源被正確回收。
?一些其他的狀態(tài)變化有 ACTION_SCAN_MODE_CHANGED 額外參數(shù) EXTRA_SCAN_MODE 和 EXTRA_PREVIOUS_SCAN_MODE以及SCAN_MODE_CONNECTABLE_DISCOVERABLE、 SCAN_MODE_CONNECTABLE和SCAN_MODE_NONE, 藍(lán)牙模塊