android 权限库EasyPermissions
众所周知,在android 6.0之后,如果应用程序需要危险权限,则用户必须明确向应用授予该权限。今天推荐一个权限相关的库easypermissions。
以相机权限来看,先看下不使用库的情况下的授权方式。
通过contextcompat.checkselfpermission()
去判断有没有权限的,没有activitycompat.requestpermissions()
去请求权限,有的话则直接调用拍照的
private void requestpermission() { if (contextcompat.checkselfpermission(this, manifest.permission.camera) != packagemanager.permission_granted) { //权限判断,没有就去请求所需权限,传参 需要申请的权限(可以多个), requestcode请求码用于结果回调里判断 activitycompat.requestpermissions(this, new string[]{manifest.permission.camera}, permissions_request_code); }else { //有权限直接拍照,6.0以下的手机拍照走这里 takephoto(); } } private void takephoto(){ intent intent = new intent(mediastore.action_image_capture); startactivity(intent); }
调用requestpermissions()
方法后需要在activity中重写onrequestpermissionsresult()
来获取回调结果。
@override public void onrequestpermissionsresult(int requestcode, @nonnull string[] permissions, @nonnull int[] grantresults) { super.onrequestpermissionsresult(requestcode, permissions, grantresults); if (permissions_request_code == requestcode) { for (int x : grantresults) { if (x == packagemanager.permission_denied) { //权限拒绝了 return; } } takephoto(); } }
使用easypermissions 来请求权限
依旧以拍照举例
同样需要在重写onrequestpermissionsresult()
,这里就直接将请求结果传递easypermission 来处理。
@override public void onrequestpermissionsresult(int requestcode, string[] permissions, int[] grantresults) { super.onrequestpermissionsresult(requestcode, permissions, grantresults); easypermissions.onrequestpermissionsresult(requestcode, permissions, grantresults, this); }
easypermissions.haspermissions(context context,string... perms)
用于检查权限是否授权,第二个参数可传多个权限值。
easypermissions.requestpermissions(context,string rationale,int requestcode,string... perms)
用于请求权限,rationale 是提示文字,requestcode 请求码,最后是多个权限值。
这里使用了@afterpermissiongranted
注解。
@afterpermissiongranted(permissions_request_code) private void requestpermission(){ string[] perms = {manifest.permission.camera}; //权限判断,第一次弹出系统的授权提示框 if (easypermissions.haspermissions(this, perms)) { //@afterpermissiongranted 有权限直接执行 todo... }else { //没有权限的话,先提示,点确定后弹出系统的授权提示框 easypermissions.requestpermissions(this, "拍照过程需要用到相机权限", permissions_request_code, perms); } }
easypermissions 库提供了权限请求的回调,activity实现 easypermissions.permissioncallbacks
重写两个方法回调。
/** * 允许权限成功后触发 */ @override public void onpermissionsgranted(int requestcode, list<string> perms) { } /** * 禁止权限后触发 */ @override public void onpermissionsdenied(int requestcode, list<string> perms) { if (easypermissions.somepermissionpermanentlydenied(this, perms)) { //在权限弹窗中,用户勾选了'不在提示'且拒绝权限的情况触发,可以进行相关提示。 } }
使用@afterpermissiongranted
注解,当权限请求被用户允许后,会根据requestcode来直接执行权限允许后的代码。
... if (easypermissions.haspermissions(this, perms)) { //加了@afterpermissiongranted,授权成功后偶直接执行里面代码 } ...
不需要在权限成功回调中再去执行代码,简化了流程。
easypermissions 库地址
欢迎关注我的个人博客:
更多精彩欢迎关注微信号:春风十里不如认识你
一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!
上一篇: 三级联动
下一篇: jQuery实现单击某个标签改变样式