android申请权限一次性申请多个,Android 批量申请权限
Android開發(fā)時(shí),到6.0系統(tǒng)上之后,有的權(quán)限就得申請(qǐng)才能用了。
Android將權(quán)限分為正常權(quán)限 和 危險(xiǎn)權(quán)限
詳細(xì)可參考: (https://www.cnblogs.com/liuzhipenglove/p/7102692.html)
網(wǎng)上也有很多參考例子,我這里總結(jié)下我的理解和用法
我們知道在Android6.0(SDK等級(jí)是23)以后有些權(quán)限是需要?jiǎng)討B(tài)申請(qǐng)的
然后這里主要記錄下如何同時(shí)動(dòng)態(tài)申請(qǐng)多個(gè)權(quán)限
我申請(qǐng)的權(quán)限有三個(gè):READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE,CAMERA,分別是讀,寫,還有相機(jī)權(quán)限, INTERNET的話我發(fā)現(xiàn)靜態(tài)注冊(cè)也是可以的,當(dāng)然以防萬一也可以加上.然后就是雖然是動(dòng)態(tài)申請(qǐng),但是還是需要在AndroidManifest.xml文件中進(jìn)行靜態(tài)申請(qǐng)的:
然后是動(dòng)態(tài)權(quán)限申請(qǐng)
<1>首先聲明一個(gè)數(shù)組permissions,將所有需要申請(qǐng)的權(quán)限都放在里面
//1、首先聲明一個(gè)數(shù)組permissions,將所有需要申請(qǐng)的權(quán)限都放在里面
String[] permissions = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
<2>創(chuàng)建一個(gè)mPermissionList,逐個(gè)判斷哪些權(quán)限未授權(quán),將未授權(quán)的權(quán)限存儲(chǔ)到mPermissionList中
// 聲明一個(gè)集合,用來存儲(chǔ)用戶拒絕授權(quán)的權(quán)
List mPermissionList = new ArrayList<>();
<3>聲明一個(gè)請(qǐng)求碼,在請(qǐng)求權(quán)限的回調(diào)方法onRequestPermissionsResult中需要判斷使用
//10000比較霸氣
private static final int MY_PERMISSIONS_REQUEST_CODE = 10000;
<4>進(jìn)行權(quán)限判斷和申請(qǐng)
private void getPermissions() {
mPermissionList.clear(); //清空已經(jīng)允許的沒有通過的權(quán)限
for (int i = 0; i < permissions.length; i++) { //逐個(gè)判斷是否還有未通過的權(quán)限
if (ContextCompat.checkSelfPermission(MainActivity.this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);
}
}
if (mPermissionList.size() > 0) { //有權(quán)限沒有通過,需要申請(qǐng)
ActivityCompat.requestPermissions(this, permissions, MY_PERMISSIONS_REQUEST_CODE);
} else {
Log.e("getPermissions() >>>", "已經(jīng)授權(quán)"); //權(quán)限已經(jīng)都通過了
}
}
<5>請(qǐng)求權(quán)限后回調(diào)的方法,在權(quán)限請(qǐng)求完成后做個(gè)判斷,是否完成了所有權(quán)限的申請(qǐng),
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean hasPermissionDismiss = false; //有權(quán)限沒有通過
if (MY_PERMISSIONS_REQUEST_CODE == requestCode) {
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == -1) {
hasPermissionDismiss = true; //發(fā)現(xiàn)有未通過權(quán)限
break;
}
}
}
if (hasPermissionDismiss) { //如果有沒有被允許的權(quán)限
//假如存在有沒被允許的權(quán)限,可提示用戶手動(dòng)設(shè)置 或者不讓用戶繼續(xù)操作
} else {
Log.e("onRequestPermissionsResult >>>", "已全部授權(quán)");
}
}
還有記錄一個(gè)坑
image.png
如果你的gradle文件中
targetSdkVersion 參數(shù)設(shè)置成了21的話 等于是用6.0以前的版本運(yùn)行,這樣的話有可能導(dǎo)致無法動(dòng)態(tài)申請(qǐng)權(quán)限,這點(diǎn)需要特別注意下
如若有補(bǔ)充,留言區(qū)留下你的寶貴意見,謝謝!!!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的android申请权限一次性申请多个,Android 批量申请权限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git源码安装
- 下一篇: android 多个占位符,Androi