您好,登錄后才能下訂單哦!
Android 6.0中怎么動態申請權限,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
系統權限分為2種:
Normal permission:對于用戶隱私沒有危險的,在清單文件中申請就可以直接授權。
Dangerous permission:app需要訪問用戶的隱私信息等,即使在清單文件注冊,也需要在運行是通過用戶授權。
Dangerous permission需要單獨申請的權限,共分為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
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
申請權限核心代碼
/**
* android 6.0 以上需要動態申請權限
*/
private void initPermission() {
//定義動態申請的權限組
String permissions[] = {Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.INTERNET,
Manifest.permission.READ_PHONE_STATE };
ArrayList<String> toApplyList = new ArrayList<String>();
//遍歷要申請的權限組里的每個權限是否已經獲取到權限了
//如果未獲取到權限加入到toApplyList列表里用于動態申請
for (String perm : permissions) {
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
toApplyList.add(perm);
// 進入到這里代表沒有權限.
}
}
//判斷是否有需要動態申請的權限用requestPermissions進行申請
if (toApplyList.size() > 0) {
String tmpList[] = new String[toApplyList.size()];
if (!toApplyList.isEmpty()) {
ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
}
} else {
//如果沒有需要動態申請的權限直接進入我們要做的事件
InitVoice();
}
}
同時要在activity里面重寫一下onRequestPermissionsResult方法,用于獲取到后權限的動作.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 此處為android 6.0以上動態授權的回調,用戶自行實現。
for (String perm : permissions) {
//得到申請權限的返回結果,如果未獲取到權限直接關閉當前activity
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
finish();
}
}
//申請到權限后執行我們要做的事件
InitVoice();
}
在activity的onCreate事件加入權限申請的調用
try {
final PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
int targetSdkVersion = info.applicationInfo.targetSdkVersion;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (targetSdkVersion >= Build.VERSION_CODES.M) {
initPermission();
}
}else {
InitVoice();
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
關于Android 6.0中怎么動態申請權限問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。