前言
从Android 6.0之后,想要扫描低功率蓝牙设备,应用需要拥有访问设备位置的权限。这是因为Bluetooth beacons蓝牙信标,可用于确定手机和用户的位置。此外,在我的Android7.1.1的一加五,申请位置权限后,还需要打开定位服务(或者叫GPS)才能扫描到BLE设备。Android这样的做法无疑保护了用户的安全,但也给开发者带来了小小的麻烦,不过没办法,一切为了用户。
效果
-
点击扫描后,用户未开启蓝牙
-
点击扫描后,检测到未获取位置权限,申请权限
-
用户拒绝权限后的提示,点击SETTINGS可以跳转到系统的应用程序设置界面申请权限
-
用户之前点过拒绝权限(没有勾选不再提示),下次申请权限之前会先提示用户申请权限的原因
-
用户未开启定位服务(全局,与权限无关),点击开启后会调到系统的定位服务管理界面
-
点击原因会提示用户开启定位服务
-
扫描后的效果(本应用侧重于扫描前的配置,扫描就只是列出设备,没有处理,甚至没用连接功能)
整个逻辑是模仿的一款叫nRF Connect的App。
实现
具体的实现我就直接贴代码了,里面注释的也很清楚。
https://github.com/xiaoniu/BLEDeviceSearch
网友评论