Android藍芽通訊(一)————藍芽功能的相關許可權
阿新 • • 發佈:2019-02-16
根據sdk中的docs的文件說明,使用Android的藍芽裝置時,只需要申請兩個許可權即可保證藍芽的正常的工作(其實在與藍芽相關的許可權一共有3個,其中BLUETOOTH_PRIVILEGED許可權只有系統應用可以使用,在這裡就不說明了),今天我們需要使用的兩個許可權是:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
按照文件上的說明只要申請了這兩個許可權我們就可以使用藍芽的相關功能了,包括開啟裝置,查詢周邊裝置、設定可見的時間等!!
但是。。。
google在android6.0之後,為了更好的保護使用者的資料安全,所有需要訪問硬體唯一識別符號的地方都需要申請位置許可權,也就是需要申請
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
申請其中的一個即可,不過我個人習慣全部申請,反正都是在同一個許可權組裡的,感覺無所謂呀!!
藍芽的許可權是normal級許可權,只需要在Manifest裡面申請即可,但是位置許可權是dangerous級許可權,除了需要在Manifest裡申請之外,還需要在程式碼中進行動態申請,並跟蹤使用者對許可權的確認結果!!(沒有授權,你肯定是不能使用完整的功能的,不過好像不影響我們開啟藍芽,藍芽的裝置搜尋功能是沒有辦法使用的)
OK!現在來看看如何動態申請許可權:
@TargetApi(Build.VERSION_CODES.M)
private void checkBluetoothAndLocationPermission(){
//判斷是否有訪問位置的許可權,沒有許可權,直接申請位置許可權 if((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|| (checkSelfPermission(Manifest.permission .ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)){
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION},LOCATION_PERMISSION_CODE);
}
}
在授權結果回撥函式中判斷使用者的授權結果:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean grantedLocation = true;
if(requestCode == LOCATION_PERMISSION_CODE){
for(int i : grantResults){
if(i != PackageManager.PERMISSION_GRANTED){
grantedLocation = false;
}
}
}
if(!grantedLocation){
Toast.makeText(this,"Permission error !!!",Toast.LENGTH_SHORT).show();
finish();
}
}
大致的流程就是這個樣子,做好了許可權申請的工作,我們接下來才可以進行進一步的藍芽開發!!
好了,關於藍芽功能相關的許可權就介紹到這裡,有興趣的朋友可以關注我一下,有什麼問題大家可以相互探討!!