問題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);