Android 6.0許可權管理以及動態申請,以定位許可權為例
阿新 • • 發佈:2019-01-01
前言:
我們都知道現在手機系統已經到了很高的版本,在我們的Android6.0以後很多許可權都被列入危險許可權,都需要使用者手動去確認
1.我們先來看一下6.0以後被列為危險級別的一些許可權
組名稱 | 組下面的許可權 |
---|---|
group:android.permission-group.CONTACTS(聯絡人組) | android.permission.WRITE_CONTACTS(寫入聯絡人) android.permission.GET_ACCOUNTS(查詢裝置上的帳戶) android.permission.READ_CONTACTS(讀取聯絡人) |
group:android.permission-group.PHONE(手機撥號) | android.permission.READ_CALL_LOG(讀取通話記錄) android.permission.READ_PHONE_STATE(讀取電話狀態) android.permission.CALL_PHONE(撥打電話) android.permission.WRITE_CALL_LOG(修改通話記錄) android.permission.USE_SIP(SIP視訊服務) android.permission.PROCESS_OUTGOING_CALLS(程式監視,修改或放棄撥出電話) com.android.voicemail.permission.ADD_VOICEMAIL(允許應用程式新增系統中的語音郵件) |
group:android.permission-group.CALENDAR(日曆) | android.permission.READ_CALENDAR(讀取日曆) android.permission.WRITE_CALENDAR(修改日曆) |
group:android.permission-group.CAMERA(相機) | android.permission.CAMERA(獲取拍照許可權) |
group:android.permission-group.SENSORS(感測器) | android.permission.BODY_SENSORS(獲取感測器許可權) |
group:android.permission-group.LOCATION(定位) | android.permission.ACCESS_FINE_LOCATION(通過gps獲取定位許可權) android.permission.ACCESS_COARSE_LOCATION(通過wifi和移動基站獲取定位許可權) |
group:android.permission-group.STORAGE(記憶體卡) | android.permission.READ_EXTERNAL_STORAGE(讀取記憶體卡) android.permission.WRITE_EXTERNAL_STORAGE(寫記憶體卡) |
group:com.sina.weibo.permission-group() | com.sina.weibo.permission.USER |
group:android.permission-group.MICROPHONE(麥克風) | android.permission.RECORD_AUDIO(錄音許可權) |
group:android.permission-group.SMS(簡訊) | android.permission.READ_SMS(讀取簡訊) android.permission.RECEIVE_WAP_PUSH(接收WAP PUSH資訊) android.permission.RECEIVE_MMS() android.permission.RECEIVE_SMS(接收簡訊許可權) android.permission.SEND_SMS(傳送簡訊) android.permission.READ_CELL_BROADCASTS(獲取小區廣播) |
2.今天我就拿定位來舉個例子來說下Android6.0以後這些許可權的申請
首先我們要判斷許可權是否開啟,開啟的話我們就直接去執行我們需要執行的方法,沒有開啟的話我們就要提示使用者去開啟
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED){//未開啟定位許可權
//開啟定位許可權,200是標識碼
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},200);
}else{
startLocaion();//開始定位
Toast.makeText(MainActivity.this,"已開啟定位許可權",Toast.LENGTH_LONG).show();
}
3.我們需要寫一個回撥的方法,onRequestPermissionsResult,在我們需要申請許可權的時候就會執行這個回撥
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 200://剛才的識別碼
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){//使用者同意權限,執行我們的操作
startLocaion();//開始定位
}else{//使用者拒絕之後,當然我們也可以彈出一個視窗,直接跳轉到系統設定頁面
Toast.makeText(MainActivity.this,"未開啟定位許可權,請手動到設定去開啟許可權",Toast.LENGTH_LONG).show();
}
break;
default:break;
}
}
4.要記得在Androidmainfest裡面標明許可權
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
5.好了,寫到這裡就已經完成了
完整原始碼下載地址: