您现在的位置是:首页 > 文章详情

android 权限库EasyPermissions

日期:2018-12-15点击:419

众所周知,在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,授权成功后偶直接执行里面代码 } ...

不需要在权限成功回调中再去执行代码,简化了流程。

文章链接:https://mp.weixin.qq.com/s/H63Sn03xV0JoINXB4SWWKA

原文链接:https://yq.aliyun.com/articles/679829
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章