了解点蓝牙开发的童鞋都知道,在进行蓝牙设备的扫描以前须要开启蓝牙。不了解的童鞋能够阅读上一篇文章:蓝牙开发之开启蓝牙。成功开启设备蓝牙功能以后,咱们须要拿到周围蓝牙设备信息,这就须要使用到扫描功能。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)。