github地址(Demo下载)
https://github.com/zhouxu88/EasyPermission
一、简介:
android6.0 开始,权限的申请发生了改变,申请变的动态化,也就是运行时权限,EasyPermission 可以帮助简化权限申请的流程,同时使得代码更加具有逻辑。对申请的结果进行统一的返回。而且当用户拒绝了权限,任然可以通过打开系统设置,手动授权后,返回APP,继续操作,可以说是完美的解决了几乎所有可能发生的情况,强烈推荐。
android6.0 开始,权限的申请发生了改变,申请变的动态化,也就是运行时权限,和 iOS 相仿,动态化的意思是指,在每次使用需要危险权限的方法的时候,需要检查程序是否获得了该权限的许可。动态化的权限申请能够让用户更加清晰的知道程序需要什么权限,以及程序中哪些地方的操作需要涉及用户安全。不再是仅仅在程序安装的时候,一次性把所需要的普通的、危险级别的权限一次性列出来,然后展示给用户。 EasyPermissionUtil 可以帮助简化权限申请的流程,同时使得代码更加具有逻辑。对申请的结果进行统一的返回。
二、如何使用
首先,引用库
dependencies {
compile 'pub.devrel:easypermissions:0.3.0'
}
同样,easypermissions处理权限分为3步。
1 、检查权限
if (Build.VERSION.SDK_INT >= 23) {
//打电话的权限
String[] mPermissionList = new String[]{Manifest.permission.CALL_PHONE};
if (EasyPermissions.hasPermissions(mContext, mPermissionList)) {
//已经同意过
call();
} else {
//未同意过,或者说是拒绝了,再次申请权限
EasyPermissions.requestPermissions(
this, //上下文
"需要拨打电话的权限", //提示文言
CALL_PHONE_REQUEST_CODE, //请求码
mPermissionList //权限列表
);
}
} else {
//6.0以下,不需要授权
call();
}
2、 申请权限
EasyPermissions.requestPermissions(
this, //上下文
"需要拨打电话的权限", //提示文言
CALL_PHONE_REQUEST_CODE, //请求码
mPermissionList //权限列表
);
3 处理EasyPermissions.PermissionCallbacks的回调接口,直接处理权限是否成功申请
//同意授权
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Forward results to EasyPermissions
//跳转到onPermissionsGranted或者onPermissionsDenied去回调授权结果
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, List<String> list) {
// Some permissions have been granted
// ...
Log.i(TAG, "onPermissionsGranted:" + requestCode + ":" + list.size());
call();
}
//拒绝授权
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
// Some permissions have been denied
// ...
Log.i(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size());
// (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN."
// This will display a dialog directing them to enable the permission in app settings.
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
//拒绝授权后,从系统设置了授权后,返回APP进行相应的操作
Log.i(TAG, "onPermissionsDenied:------>自定义设置授权后返回APP");
call();
}
}