问题1描述
1、安卓12
需要动态鉴权
// 鉴权函数
requestPermissions(permissionsList.toArray(strings), MyConstants.REQUEST_CODE_PERMISSIONS);
但是在鉴权回调函数中如Manifest.permission.BLUETOOTH_SCAN
、Manifest.permission.BLUETOOTH_CONNECT
一直显示失败,即如下鉴权回调中,grantResults
返回的值是-1
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
问题1原因分析
因为Manifest.permission.BLUETOOTH_SCAN
、Manifest.permission.BLUETOOTH_CONNECT
是在安卓12
版本的系统及以上才有的,而以下版本是没有的
,如果在安卓12
版本以下去动态鉴权这些权限,那肯定是会失败
问题1部分解决方案
参看其他博客解决方案就是分开鉴权
。但是存在搜索设备失败
问题,即问题2
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
//这里是安卓12的权限permissions.add(Manifest.permission.BLUETOOTH_SCAN);permissions.add(Manifest.permission.BLUETOOTH_ADVERTISE);permissions.add(Manifest.permission.BLUETOOTH_CONNECT);}else{//这是其他的permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);}
问题2解决
对于安卓12
也需要添加定位相关权限,而其他不需要添加安卓12
要求的权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
//这里是安卓12的权限permissions.add(Manifest.permission.BLUETOOTH_SCAN);permissions.add(Manifest.permission.BLUETOOTH_ADVERTISE);permissions.add(Manifest.permission.BLUETOOTH_CONNECT);}permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);