4-低功耗蓝牙开发之设备扫描

目录

 

一、前言:

二、开启蓝牙扫描:

1.获取BluetoothAdapter(蓝牙适配器)

2.获取BluetoothLeScanner(蓝牙扫描器)

3.添加权限:

4.开始扫描:

5.扫描参数解析:

6.扫描结果


一、前言:

了解点蓝牙开发的童鞋都知道,在进行蓝牙设备的扫描之前需要开启蓝牙。不了解的童鞋可以阅读上一篇文章:蓝牙开发之开启蓝牙。成功开启设备蓝牙功能之后,我们需要拿到周围蓝牙设备信息,这就需要使用到扫描功能。

二、开启蓝牙扫描:

1.获取BluetoothAdapter(蓝牙适配器)

bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()

 

2.获取BluetoothLeScanner(蓝牙扫描器)

熟悉蓝牙的童鞋应该知道,在Android 4.3(API 18)时,增加了使用BluetoothAdapter扫描低功耗蓝牙的扫描方法bluetoothAdapter.startLeScan()但是在Android 5.0(API 21)之后就废弃了,并提倡我们使用BluetoothLeScanner#startScan(List, ScanSettings, ScanCallback)替代,在废弃的方法里可以指定蓝牙低功耗蓝牙的UUID去指定要去扫描的设备,同时在回调方法里获取蓝牙设备信息。总之使用蓝牙扫描器扫描低功耗蓝牙设备的优点是不言而喻的,所以这里大家应该有个取舍,或者兼容到Android 4.3,不过我认为没有必要的,并且该版本设备占有率也不高。

言归正传,我们首先获取蓝牙扫描器对象:

if (bluetoothAdapter != null) {

bluetoothLeScanner = bluetoothAdapter.getBluetoothLeScanner();

}

 

3.添加权限:

上一步骤中我们已经说过,我们推荐使用BLuetoothLeScanner进行低功耗蓝牙的扫描,但是使用该方法进行扫描需要模糊定位权限,所以需要在注册清单中添加:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

 

4.开始扫描:

使用蓝牙扫描器对象调用开始扫描方法进行扫描:

bluetoothLeScanner.startScan(filters, settings, callback)

说一下三个参数的含义:

  • List<ScanFilter> filters:蓝牙扫描的过滤条件,是一个ScanFilter集合,如果没有过滤条件的话可以填null;
  • ScanSettings settings:扫描配置,可以不进行任何设置,也就是new ScanSettings.Builder().build()传递一个空对象;
  • ScanCallback callback:扫描回调,用于接收扫描回调的结果和扫描失败的回调;

注意:使用该方法扫描低功耗蓝牙设备需要满足Android系统版本在Build.VERSION_CODES.LOLLIPOP以上。

 

5.扫描参数解析:

(1)ScanFilter:扫描过滤条件。

官方API提供了多种方法添加过滤条件:

关于过滤条件这儿,我也尝试过多次,有些过滤条件不太好使,大家有其他想法,希望能够指正。

  1. 使用ScanFilter在扫描前将扫描规则加入,得到即为符合规则的设备信息;
  • 使用设备名进行过滤,区分大小写;
  • 使用设备Mac地址进行过滤,需严格按照原则进行;
  • 使用ServiceUuid进行过滤无效(初步原因判断为:扫描得到的uuid集合为空);
  • 使用ServiceData进行过滤需要ServiceUuid配合ServiceData进行使用,同时配置的ServiceData为完整数据中的不可变部分;
  • 蓝牙的ServiceUuid只有四位可以修改:"0000****-0000-1000-8000-00805F9B34FB";
  • 数据均为16进制字符串转化的Byte数组;

               注意:使用该方法进行过滤有些方式不太好使;

  2.不添加过滤规则,扫描完成后代码过滤;

(2)ScanSettings :参数扫描配置类

官方API提供了多个方法:

一般我们只使用setScanMode()方法就可以,其他参数使用默认值。

该方法有三种取值:

  • SCAN_MODE_LOW_POWER:低功耗模式,默认的扫描模式,当应用不在前台时默认执行。
  • SCAN_MODE_BALANCED:平衡模式
  • SCAN_MODE_LOW_LATENCY:高频模式,前台时建议使用此模式。

 

6.扫描结果

我们在开始扫描的时候使用了ScanCallback,在onScanResult(int callbackType, ScanResult result)方法里处理回调扫描到的设备信息;如果扫描失败会回调该方法onScanFailed(int errorCode)。

>>下一篇:5-BLE广播数据解析

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心灵行者

你的鼓励是我最大的创作动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值