主要是api的说明,嫌啰嗦的可以直接看demo,demo中有个检测锁屏时间重复开启扫描的代码,主要是如果APP没有获得电量或者后台运行的权限,只能持续后台运行几小时。
这个demo的作用是实现8.0以后的后台监测到特定蓝牙信号自动唤醒APP的功能,首先需要另外一个装了可以发射蓝牙信号软件的手机,我这边是选取的ios平台上的lightblue,然后在这个软件里面新建一个虚拟设备名称是要demo搜索的蓝牙模块名称。然后把app杀掉,过一段时间打开lightblue发射蓝牙信号,然后关掉,再次打开demo,会发现demo中记录的时间就是你发射蓝牙信号的时间,说明被杀后它还是在监测蓝牙信号的
先看gif的效果
Demo的Github地址如下
https://github.com/TracyEminem/BleSingle
在Android 8.0以上的版本中,Google提供了一种可以在后台持续扫描的方式,如果不给后台运行的权限,也是可以在锁屏后持续进行蓝牙扫描,可以持续大概几个小时,还可以利用传的intent来从后台唤醒APP。。。我做了尝试,如果把app从任务栏删掉,再发出蓝牙信号也可以让app自动运行唤醒。。。如果你给与了电量限制,后台运行相关的权限,那么这个扫描是可以持续很久的,使用前台service我做到过5天保持扫描一直在运行。而且这个耗电量很低,基本上忽略不计。。原理有点类似于IOS上的IBEACON唤醒APP,虽然Android也有类似的Eddystone,但是Eddystone不支持后台持续监测,Eddystone可以利用Google nearby的api检测到甚至IBEACON也是可以检测的,但是google nearby的检测方式依赖于你何时按下锁屏按钮的,如果你在beacon附近没有按锁屏按钮,那么是不会再后台检测BEACON信号的。。
唤醒的api如下