个人技术分享

问题1描述

1、安卓12需要动态鉴权

// 鉴权函数           
requestPermissions(permissionsList.toArray(strings), MyConstants.REQUEST_CODE_PERMISSIONS);

但是在鉴权回调函数中如Manifest.permission.BLUETOOTH_SCANManifest.permission.BLUETOOTH_CONNECT一直显示失败,即如下鉴权回调中,grantResults返回的值是-1

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) 

问题1原因分析

因为Manifest.permission.BLUETOOTH_SCANManifest.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);