瞭解點藍牙開發的童鞋都知道,在進行藍牙設備的掃描以前須要開啓藍牙。不瞭解的童鞋能夠閱讀上一篇文章:藍牙開發之開啓藍牙。成功開啓設備藍牙功能以後,咱們須要拿到周圍藍牙設備信息,這就須要使用到掃描功能。android
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
複製代碼
熟悉藍牙的童鞋應該知道,在Android 4.3(API 18)時,增長了使用BluetoothAdapter掃描低功耗藍牙的掃描方法bluetoothAdapter.startLeScan()可是在Android 5.0(API 21)以後就廢棄了,並提倡咱們使用BluetoothLeScanner#startScan(List, ScanSettings, ScanCallback)替代,在廢棄的方法裏能夠指定藍牙低功耗藍牙的UUID去指定要去掃描的設備,同時在回調方法裏獲取藍牙設備信息。總之使用藍牙掃描器掃描低功耗藍牙設備的優勢是不言而喻的,因此這裏你們應該有個取捨,或者兼容到Android 4.3,不過我認爲沒有必要的,而且該版本設備佔有率也不高。數組
言歸正傳,咱們首先獲取藍牙掃描器對象:bash
if (bluetoothAdapter != null) {
bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();
}複製代碼
上一步驟中咱們已經說過,咱們推薦使用BLuetoothLeScanner進行低功耗藍牙的掃描,可是使用該方法進行掃描須要模糊定位權限,因此須要在註冊清單中添加:ui
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />複製代碼
使用藍牙掃描器對象調用開始掃描方法進行掃描:spa
bluetoothLeScanner.startScan(filters, settings, callback)複製代碼
說一下三個參數的含義:
注意:使用該方法掃描低功耗藍牙設備須要知足Android系統版本在Build.VERSION_CODES.LOLLIPOP以上.net
(1)ScanFilter:掃描過濾條件。3d
官方API提供了多種方法添加過濾條件:code
關於過濾條件這兒,我也嘗試過屢次,有些過濾條件不太好使,你們有其餘想法,但願可以指正。
cdn
注意:使用該方法進行過濾有些方式不太好使;對象
2.不添加過濾規則,掃描完成後代碼過濾;
(2)ScanSettings :參數掃描配置類
官方API提供了多個方法:
通常咱們只使用setScanMode()方法就能夠,其餘參數使用默認值。
該方法有三種取值:
咱們在開始掃描的時候使用了ScanCallback,在onScanResult(int callbackType, ScanResult result)方法裏處理回調掃描到的設備信息;若是掃描失敗會回調該方法onScanFailed(int errorCode)。