【android 6.0 動態申請許可權的基本方法和框架使用】
阿新 • • 發佈:2019-01-08
基本的使用:
先提供一下goog官方的學習文件:
int selfPermission = ContextCompat.checkSelfPermission(Main2Activity.this, Manifest.permission.CALL_PHONE);
if (selfPermission != PackageManager.PERMISSION_GRANTED) {
/**
* 判斷該許可權請求是否已經被 Denied(拒絕)過。 返回:true 說明被拒絕過 ; false 說明沒有拒絕過
*
* 注意:
* 如果使用者在過去拒絕了許可權請求,並在許可權請求系統對話方塊中選擇了 Don't ask again 選項,此方法將返回 false。
* 如果裝置規範禁止應用具有該許可權,此方法也會返回 false。
*/
if (ActivityCompat.shouldShowRequestPermissionRationale(Main2Activity.this, Manifest.permission.CALL_PHONE)) {
Log.i(TAG, "onViewClicked: 該許可權請求已經被 Denied(拒絕)過。");
//彈出對話方塊,告訴使用者申請此許可權的理由,然後再次請求該許可權。
//ActivityCompat.requestPermissions(Main2Activity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
} else {
Log.i(TAG, "onViewClicked: 該許可權請未被denied過");
ActivityCompat.requestPermissions(Main2Activity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
}
} else {
openAlbum();//開啟相簿
}
發起請求的回撥:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.i(TAG, "onRequestPermissionsResult: requestCode=" + requestCode);
switch (requestCode) {
case 1:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
openAlbum();
} else {
Toast.makeText(this, "you denied the permission", Toast.LENGTH_SHORT).show();
Log.i(TAG, "onRequestPermissionsResult: you denied the permission");
}
break;
default:
break;
}
}
一些框架的封裝:
HiPermission 的簡單使用:更多檢視參考部落格相關文章。
該方法 申請幾乎必要的三個許可權。照相,定位,sd卡寫
//CAMERA, ACCESS_FINE_LOCATION and WRITE_EXTERNAL_STORAGE
HiPermission.create(this)
.animStyle(R.style.PermissionAnimModal)
//.style(R.style.PermissionDefaultGreenStyle)
.checkMutiPermission(new PermissionCallback() {
@Override
public void onClose() {
Log.i(TAG, "onClose They cancelled our request"); //使用者關閉許可權申請
}
@Override
public void onFinish() {
Log.i(TAG, "onFinish: All permissions requested completed"); //所有許可權申請完成
}
@Override
public void onDeny(String permission, int position) {
Log.i(TAG, "onDeny");//在否認
}
@Override
public void onGuarantee(String permission, int position) {
Log.i(TAG, "onGuarantee");//使用者允許後,會回撥該函式 //在此可以做 事件處理啦,因為使用者已經同意了,此時已經拿到所需許可權啦。
}
});
自6.0以後,都有哪些許可權需要動態獲取呢?在此羅列一下:
共分為9組,每組只要有一個許可權申請成功了,就預設整組許可權都可以使用了。
group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS
group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE (打電話)
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL
group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR
group:android.permission-group.CAMERA
permission:android.permission.CAMERA ( 相機 )
group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS
group:android.permission-group.LOCATION (位置相關)
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
group:android.permission-group.STORAGE ( SD卡讀寫許可權 )
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO
group:android.permission-group.SMS (簡訊相關)
permission:android.permission.READ_SMS (讀取簡訊)
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS (接受簡訊)
permission:android.permission.SEND_SMS (傳送簡訊)
permission:android.permission.READ_CELL_BROADCASTS
參考部落格:
一行程式碼搞定漂亮的Android6.0許可權申請介面
HiPermission