權限組(Permission Group)
所有的權限都屬于權限組當中,包括常規(guī)權限和危險權限点楼。對于常規(guī)權限而言南蓬,用戶并不需要進行手動賦予權限歇父,而危險權限則相反坏怪,所以開發(fā)者只需要關注危險權限即可盼忌。
如果app是運行在android 6.0(API level 23)版本上并且app的targetSdkVersion必須是23或者更高积糯。
如果一個app需要在Mainfest中請求一個危險權限,但是app當前在權限組中并沒有任何相關的權限谦纱,系統(tǒng)則會彈出一個提示框來讓用戶自主選擇是否賦予當前app相關權限來支持app的相關操作看成。比如,如果一個app請求讀取聯(lián)系人的權限(READ_CONTACTS)跨嘉,系統(tǒng)會彈出一個提示框詢問用戶是否為當前app提供讀取聯(lián)系人的權限川慌,用戶確認提供則app才會獲得權限。
如果app在請求一個危險權限(A)的時候祠乃,app已經(jīng)包含相同權限組中另一個危險權限了梦重,那么系統(tǒng)會自動提供A的權限,相當于一個權限組中的其中一個權限被請求了通過了亮瓷,其他權限不需要再次請求琴拧。
附危險權限組:
動態(tài)添加ACTION_MANAGE_WRITE_SETTINGS權限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 判斷是否有WRITE_SETTINGS權限
if(!Settings.System.canWrite(this)) {
// 申請WRITE_SETTINGS權限
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
} else {
dosomething();
}
} else {
dosomething();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intentdata) {
if (requestCode == REQUEST_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 判斷是否有WRITE_SETTINGS權限
if (Settings.System.canWrite(this)) {
dosomething();
}
}
}
super.onActivityResult(requestCode, resultCode, data);
}