对于Android6.0动态权限 以前一直的解决都是把项目的版本号调在22,可是这样写 很不优美,不与时俱进,这就很难受了。。所以在闲着的时候 这一下技术总结!!!因为不会动图,就不上效果展示了,请见谅..
1.引入 github 地址 implementation 'pub.devrel:easypermissions:1.2.0'
2.在Manifest中 相关配置要用到的危险权限(注意动态申请不仅要在使用的时候去动态申请,配置清单文件时同时也要配置,因为还有6.0以下的手机)
3.在要用到权限的页面 声明所需权限
String[]perms={ Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION};
4.判断是否有权限(不能在事件的监听中去调用)
if (EasyPermissions.hasPermissions(this, perms)) {
//用户已经授权,如果有权限进行相关操作
// Already have permission, do the thing
// ...
} else {
// 用户没有授权,调用以下代码,询问是否授权提示框
EasyPermissions.requestPermissions(this, "相关权限被禁止,无法使用某些功能,请开启",
0, perms);
}
5.是否授权的回调监听 ,实现implements EasyPermissions.PermissionCallbacks
//这是点击了同意授权的监听回调
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
if (requestCode == 0) {
for (int i = 0; i < perms.size(); i++) {
if (perms.get(i).equals(Manifest.permission.READ_CONTACTS)) {
Toast.makeText(this, "我要去联系人了", Toast.LENGTH_SHORT).show();
}
}
}
}
//这是点击了拒绝授权的监听回调
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
//调用以下代码,当用户第一次提示授权时点击了拒绝,再次弹窗提示他 是否不在提示 拒绝此权限;
EasyPermissions.requestPermissions(this, "拒绝了就不能用了哦", 0, perms2);
}
6.同时不要忘记最后一点 重写一下方法
//次回调页面自己的回调 必须重写
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Forward results to EasyPermissions
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
好了,总结完毕,开始去试试吧!