前言:
IPhone 可以通过 ibeacon 设备发出的蓝牙广播来唤醒应用,但android有没有类似的机制来进行唤醒app呢?
很开心的告诉你,在 android 8.0(android 0) 以上的系统已经支持了!!!
说明:
注:api level 26 即 android 8.0
该方法是用于扫描手机周边的蓝牙设备。在8.0以前,google提供的蓝牙扫描方法都是需要app进程还活。但该方法只要调用成功,无论app进程是否还活着,系统都会在后台持续执行蓝牙扫描。如果手机靠近指定的蓝牙设备附近,app就能被唤醒接收蓝牙的扫描结果。
用途:
该机制虽然只能在特定的区域对app进行唤醒,但在很多业务场景上非常实用,举几个栗子:
1.室内定位
2.进入商场用户立马能收到商场的活动信息
3.运动手环需要即时上报数据(如:电量不足等)
....
开发:
支持该机制的拉活,实际上就是让app去扫描一个特定的蓝牙广播,等待系统返回结果。相信有弄过蓝牙开发的小伙伴都知道蓝牙开发这个坑有多深,而下面是一个跳坑的教程。
一.权限:
注:ACCESS_FINE_LOCATION在android 6.0以上需要运行获取(见6.0以上运行时权限申请)。
app除获取了上述权限,还需要确保蓝牙开启,以下是代码开启蓝牙的方法:
//判断如果蓝牙没有开启的话,则进行提示用户开启
BluetoothManager bluetoothManager =(BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter bluetoothAdapter=bluetoothManager.getAdapter();if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) {
Intent enableBtIntent= newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
二.API调用
@TargetApi(26)public voidonOpen(