BLE扫描安卓实现

BLE扫描安卓实现

BLE扫描安卓实现

低功耗蓝牙在市面上越发常见,使用的场景也不断地增加,接着《低功耗蓝牙BLE扫描》继续分享其在安卓系统是如何实现的。

一切的技术或服务都是为应用而存在的,BLE也不例外,BLE发挥其强大功能的起点必是那些BLE相关的应用,第一步就是扫描周围环境中的低功耗蓝牙设备了。

本期安卓代码使用的版本:Android – 9

BLE应用开启扫描的接口如下两种方案:

  1. BluetoothLeScanner. startScan(),提供了多种接口,最简单的就是传入回调函数方便后续接收扫描到的结果
  2. BluetoothAdapter. startLeScan(),过时接口,内部实现方案同方案一,不建议使用

显而易见方案一是当前安卓系统开启BLE扫描的主流接口,我们就跟随 BluetoothLeScanner. startScan() 开启本篇的分享吧。

应用层可以通过接口设置BLE扫描的参数和过滤条件,从而只关心自己应用感兴趣的蓝牙设备,减少了不必要的操作。为了广泛性,接下来都是采用默认参数开启的扫描。

BLE扫描还有个特殊性就是一对一,就是一个应用对应一个扫描ID,应用设置的参数或过滤条件等都是和这个扫描ID绑定的,从而实现只上报应用感兴趣的BLE设备的目标。因此BLE扫描流程分为如下两步:

  1. 扫描apk注册
  2. 开始扫描

步骤一:扫描apk注册
通过该流程获取到对应于当前应用的扫描ID,注册成为一个合法的扫描者,简单时序图如下
BLE扫描安卓实现

步骤二:开始扫描
通过第一步注册成功获取到的扫描ID将应用设置的扫描参数和过滤条件下发到蓝牙芯片,并最后使能扫描。
BLE扫描安卓实现

上面时序图中开启BLE扫描简单总结就是完成了三个动作:设置过滤条件(scan filter)设置扫描参数使能BLE扫描,蓝牙芯片依次接收到上面三条指令后就执行BLE扫描,并将扫描到的BLE设备依次上报,最终数据上报到各应用中,应用根据自己的需要获取相关数据进行展示。

下面截取了一段 BLE调试助手 apk扫描BLE设备的视频,大体流程同上所述:

<iframe allowfullscreen="true" data-mediaembed="csdn" id="FFGf0bdY-1614075767776" src="https://live.csdn.net/v/embed/155714"></iframe>

BLE scan

由于安卓系统在使能BLE扫描时,默认不会设置超时时间的,因此需要上层应用主动决定何时停止扫描。

本期分享就先到这儿,感兴趣的小伙伴欢迎私信留言一起讨论,共同学习,一起进步!更多互联互通技术,欢迎关注微信公众号:Connectivity
BLE扫描安卓实现

上一篇:RabbitMQ集群搭建


下一篇:马氏链,Metropolis-Hastings采样与Gibbs采样的理解(附有python仿真)