????????近期遇到一個問題,之前發(fā)布的APP連接藍牙都是正常的,現(xiàn)在有人反映連不上了。經(jīng)過測試發(fā)現(xiàn):android 12 和 harmonyOS 3.0.0 都會有這個問題,而之前的版本就不會有這個。
????????經(jīng)過網(wǎng)上一番查找,原來是因為最近Google發(fā)布的Android 12,新引入了 BLUETOOTH_SCAN、BLUETOOTH_CONNECT、BLUETOOTH_ADVERTISE 三個權(quán)限。、
????????從Android 12開始,過去的藍牙權(quán)限被拆分成了3個新的權(quán)限,并且全都是運行時權(quán)限(需要動態(tài)申請):
- BLUETOOTH_SCAN 用于使用藍牙掃描附件其他的藍牙設(shè)備
- BLUETOOTH_ADVERTISE 用于允許當前的設(shè)備被其他的藍牙設(shè)備所發(fā)現(xiàn)
- BLUETOOTH_CONNECT 用于連接之前已經(jīng)配對過的藍牙設(shè)備
????????這3個權(quán)限都是從Android 12系統(tǒng)才開始有的,所以為了能夠兼容過去的老版本,建議在AndroidManifest.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.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
????????新增的3個藍牙權(quán)限都是運行時權(quán)限,因此只在AndroidManifest.xml中聲明是沒有用的,還要在代碼中動態(tài)申請權(quán)限才行。必須先在應(yīng)用中用戶明確批準使用,然后才能查找藍牙設(shè)備、使某個設(shè)備可被其他設(shè)備檢測到,或者與已配對的藍牙設(shè)備通信。
????????具體的申請方法如下:首先要判斷當前的系統(tǒng)版本,只有當Android 12及以上系統(tǒng)時,才應(yīng)該去請求新增的藍牙權(quán)限。(PS:3個權(quán)限都屬于同一個權(quán)限組,因此理論上只要申請一個權(quán)限,另外2個也就自動授權(quán)了。)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String[] permission = checkSelfPermissionArray(this, new String[]{
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_ADVERTISE,
Manifest.permission.BLUETOOTH_CONNECT});
if (permission.length > 0) {
ActivityCompat.requestPermissions(this, permission, 102);
}
}
注意:文章來源:http://www.zghlxwxcb.cn/news/detail-793432.html
之前的Android系統(tǒng)中有一個很奇怪的現(xiàn)象,當我們在應(yīng)用中使用藍牙掃描附件設(shè)備的時候,需要申請地理位置權(quán)限。藍牙權(quán)限并不是運行時權(quán)限,但地理位置權(quán)限卻是。文章來源地址http://www.zghlxwxcb.cn/news/detail-793432.html
到了這里,關(guān)于Android連接藍牙設(shè)備問題(android.permission.BLUETOOTH)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!