Android应用项目每次最开始都要进行权限申请,贴一下权限申请的示例代码,方便后续Ctrl C+V使用
1.AndroidManifest.xml 配置要申请的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.示例代码:
可以封装成一个权限类供其他地方调用,懒得写了,代码先散装着贴吧。
private static final int REQUEST_PERMISSION_CODE = 101010; //默认请求权限的requestCode为1
//需要申请的权限数组
private String[] requestPermissionArray = new String[]{
Manifest.permission.READ_CONTACTS,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
public void checkPermission(Context context, String[] permissions) {
//存放permissions中当前未被授予的权限
List<String> permissionList = new ArrayList<>();
//遍历权限数组,检测所需权限是否已被授予,若该权限尚未授予,添加到permissionList中
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
Log.e(TAG, "checkSelfPermission:" + permission);
if (!permissionList.contains(permission)) {
permissionList.add(permission);
Log.e(TAG, "permissionList add " + permission);
}
}
}
if (!permissionList.isEmpty()) {
//有权限尚未授予,去授予权限
ActivityCompat.requestPermissions((Activity) context,
permissionList.toArray(new String[permissionList.size()]),
REQUEST_PERMISSION_CODE);
} else {
//权限都被授予了
Log.d(TAG, "权限都授予了");
//doSomething();
}
}
/**
* 申请权限结果返回
*
* 通常checkPermission()权限都能申请下来,返回结果不处理也没问题
*
* @param requestCode 请求码
* @param permissions 所有申请的权限集合
* @param grantResults 权限申请的结果
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.i(TAG, "onRequestPermissionsResult");
switch (requestCode) {
case REQUEST_PERMISSION_CODE:
if (grantResults.length > 0) { //有权限申请
//存储被用户拒绝的权限
List<String> deniedPermissionList = new ArrayList<>();
//有权限被拒绝,分类出被拒绝的权限
for (int i = 0; i < grantResults.length; i++) {
String permission = permissions[i];
int grantResult = grantResults[i];
if (grantResult != PackageManager.PERMISSION_GRANTED) {
if (!deniedPermissionList.contains(permission)) {
deniedPermissionList.add(permission);
}
}
}
if (deniedPermissionList.isEmpty()) {
//没有被拒绝的权限
Log.d(TAG, "权限都授予了");
//doSomething();
} else {
//有被拒绝的权限
Log.e(TAG, "有权限被拒绝了");
//继续申请
}
}
break;
}
}