Android12 关于蓝牙这部分新增了BLUETOOTH_SCAN
、BLUETOOTH_ADVERTISE
和 BLUETOOTH_CONNECT
权限,这些权限都属于敏感权限,都需要在代码中动态申请。移除了Android11 及以下版本中必须申请的位置权限[FINE_LOCATION
] 和 [COARES_LOCATION
]。
权限的申请
1、在Manifest.xml清单文件中添加对应的权限。
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
其中 Android12 也提供了自主选择是否需要推导位置的操作,就是在 BLUETOOTH_SCAN 权限后加上android:usesPermissionFlags="neverForLocation"属性表示不推导位置权限。
2、在java代码中动态申请权限文章来源:https://www.toymoban.com/news/detail-617234.html
private List<String> mPermissionList = new ArrayList<>();
// 动态申请权限
private void initPermission(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
// Android 版本大于等于 Android12 时
// 只包括蓝牙这部分的权限,其余的需要什么权限自己添加
mPermissionList.add(Manifest.permission.BLUETOOTH_SCAN);
mPermissionList.add(Manifest.permission.BLUETOOTH_ADVERTISE);
mPermissionList.add(Manifest.permission.BLUETOOTH_CONNECT);
} else {
// Android 版本小于 Android12 及以下版本
mPermissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION);
mPermissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if(mPermissionList.size > 0){
ActivityCompat.requestPermissions(this,mPermissionList.toArray(new String[0]),1001);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults){
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 有权限没有通过
boolean hasPermissionDismiss = false;
if(1001 == requestCode){
for(int i = 0; i < grantResults.length; i++){
if(grantResults[i] == -1){
hasPermissionDismiss = true;
break;
}
}
}
if(hasPermissionDismiss){
// 有权限未通过的处理
...
} else {
//权限全部通过的处理
...
}
}
这样就能解决在 Android12 及以上版本搜索不到设备的情况。
如果还是有不懂的地方可以参考官方文档文章来源地址https://www.toymoban.com/news/detail-617234.html
到了这里,关于《Android学习笔记》Android12蓝牙扫描不到设备的权限问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!