Android6.0+权限处理

项目引入了鸿洋大神开源的一个权限处理库,采用了注解(编译时,设置gradle,依赖必须在app级别的gradle文件声明)开发,可直接通过注解获取权限申请成功和失败回调。
github地址:MPermissions

注意:gradle2.2之后不需要apt了,直接在app级别的gradle写如下声明即可:

1
2
3
> annotationProcessor 'com.zhy:mpermission-compiler:1.0.0'
compile 'com.zhy:mpermission-api:1.0.0'
>

由于这个项目lib库中定义了app_name标签,需要在app的manifest文件中加入tools:replace="android:label",具体如下:

1
2
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
1
2
<application
tools:replace="android:label">

以相机权限为例:
首先,相机点击事件:

1
2
3
if (!MPermissions.shouldShowRequestPermissionRationale(PhotoPickerActivity.this, Manifest.permission.CAMERA, ConstPermission.PERMISSIONS_REQUEST_CAMERA)) {
MPermissions.requestPermissions(PhotoPickerActivity.this, ConstPermission.PERMISSIONS_REQUEST_CAMERA, Manifest.permission.CAMERA);
}

这里是权限处理的代码,相机点击后的真正逻辑不能写在点击事件中,要写在注解的回调里面:

1
2
3
4
5
6
7
8
9
10
11
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
MPermissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@PermissionGrant(ConstPermission.PERMISSIONS_REQUEST_CAMERA)
public void requestSdcardSuccess()
{
showCameraAction();
}

就是说不管一开始有没有权限,最终都会执行到requestSdcardSuccess这里。

如果您觉得这篇文章不错,可以打赏支持下哦,谢谢