最近在做重构项目的过程中,重构蓝牙扫描模块的时候。发现调用扫描方法的时候,根本没有返回搜索到的设备。开始以为是厂商sdk的bug,或者是自己新写的代码问题。然后没有用厂商sdk,自己写代码来扫描,琢磨了半天看日志,debug,依然没找到问题。后来突然想到是不是权限的问题,之前项目的targetSdkVersion 22,新的项目是23,然后Android 6.0有一套新的权限机制,敏感权限需要申请,感觉可能是权限问题导致的。
搜索了一下,下面是具体的权限列表
Normal Permission
1 | ACCESS_LOCATION_EXTRA_COMMANDS |
Dangerous Permission
1 | group:android.permission-group.CONTACTS |
看了一下蓝牙权限不是敏感权限,应该不需要在运行时获取啊。然后查了下官方文档。
有这么一段内容:
所以在通过蓝牙扫描附近外部设备时,需要获取这两个权限。1
2ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
检查和申请权限可以调用这两个方法,具体如何使用可以自行搜索。1
2checkSelfPermission()
requestPermissions()
处理权限的代码并不复杂,但是需要自己去封装。
我自己是使用的一个开源库:https://github.com/lovedise/PermissionGen
使用起来比较方便,感兴趣的可以看看。