您好,登錄后才能下訂單哦!
為提供更高的數據保護 Android6.0版本上增加了關于Wifi和藍牙的權限。
藍牙搜索到設備需要用到定位服務,所以在開發中 targetSdkVersion 大于等于23(6.0) 需要在代碼中進行權限獲取
需要在配置文件中申請兩個權限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
在代碼中調用時先進行權限判斷,如果沒有權限就去申請權限:
private void requestPermission() { if (Build.VERSION.SDK_INT >= 23) { int checkAccessFinePermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION); if (checkAccessFinePermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION_ACCESS_LOCATION); Log.d(TAG, "沒有權限,請求權限"); return; } Log.d(TAG, "已有定位權限"); } //做下面該做的事 }
調用ActivityCompat.requestPermissions()之后會有一個回調
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case Common.REQUEST_PERMISSION_ACCESS_LOCATION: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.d(TAG, "開啟權限permission granted!"); //做下面該做的事 } else { Log.d(TAG, "沒有定位權限,請先開啟!"); } } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }
網上有人說,當彈出權限確認框之后,用戶點擊確定或者拒絕時才會調用進行回調:onRequestPermissionsResult
但是在小米手機MIUI上并不是這樣的。MIUI上是這樣的:權限管理那里設置應用的定位權限為拒絕或者詢問時checkAccessFinePermission != PackageManager.PERMISSION_GRANTED,說明沒有定位權限 。如果設置為允許,checkAccessFinePermission ==PackageManager.PERMISSION_GRANTED,說明有定位權限。
當設置拒絕時去ActivityCompat.requestPermissions ,并沒有彈出權限使用確認框,而是直接回調:沒有權限
當設置詢問時去ActivityCompat.requestPermissions ,并沒有彈出權限使用確認框,而是直接回調:已有權限,然后在調用藍牙代碼的時候彈出確認框。當點擊允許時權限管理那里變成了允許,當點擊拒絕時,權限管理那里變成拒絕,但是下次再進行權限檢查時返回 已有定位權限。權限管理那里明明是拒絕的啊,怎么就有定位權限了?感覺這是MIUI的一個bug,我的系統是:MIUI 8 6.11.3開發版。
以上這篇Android6.0 藍牙搜索不到設備原因,MIUI權限申請機制方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。