Android12 關(guān)于藍(lán)牙這部分新增了BLUETOOTH_SCAN
、BLUETOOTH_ADVERTISE
和 BLUETOOTH_CONNECT
權(quán)限,這些權(quán)限都屬于敏感權(quán)限,都需要在代碼中動(dòng)態(tài)申請(qǐng)。移除了Android11 及以下版本中必須申請(qǐng)的位置權(quán)限[FINE_LOCATION
] 和 [COARES_LOCATION
]。
權(quán)限的申請(qǐng)
1、在Manifest.xml清單文件中添加對(duì)應(yīng)的權(quán)限。
<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 也提供了自主選擇是否需要推導(dǎo)位置的操作,就是在 BLUETOOTH_SCAN 權(quán)限后加上android:usesPermissionFlags="neverForLocation"屬性表示不推導(dǎo)位置權(quán)限。
2、在java代碼中動(dòng)態(tài)申請(qǐng)權(quán)限文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-617234.html
private List<String> mPermissionList = new ArrayList<>();
// 動(dòng)態(tài)申請(qǐng)權(quán)限
private void initPermission(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
// Android 版本大于等于 Android12 時(shí)
// 只包括藍(lán)牙這部分的權(quán)限,其余的需要什么權(quán)限自己添加
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);
// 有權(quán)限沒(méi)有通過(guò)
boolean hasPermissionDismiss = false;
if(1001 == requestCode){
for(int i = 0; i < grantResults.length; i++){
if(grantResults[i] == -1){
hasPermissionDismiss = true;
break;
}
}
}
if(hasPermissionDismiss){
// 有權(quán)限未通過(guò)的處理
...
} else {
//權(quán)限全部通過(guò)的處理
...
}
}
這樣就能解決在 Android12 及以上版本搜索不到設(shè)備的情況。
如果還是有不懂的地方可以參考官方文檔文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-617234.html
到了這里,關(guān)于《Android學(xué)習(xí)筆記》Android12藍(lán)牙掃描不到設(shè)備的權(quán)限問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!