`
xuanzhui
  • 浏览: 197446 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Android权限控制EasyPermissions

阅读更多

EasyPermissions项目地址 https://github.com/googlesamples/easypermissions

 

1. 在AndroidManifest定义权限

<uses-permission android:name="android.permission.CAMERA" />

 

2. 在需要权限的方法前添加注解 @AfterPermissionGranted   ,该注解需要传入requestCode,用于区分请求

@AfterPermissionGranted(200)
void reqScanCamera() {
    String[] perms = {Manifest.permission.CAMERA};
    if (EasyPermissions.hasPermissions(this, perms)) {
        // 如果拥有权限
    } else {
        // 如果没有权限
        EasyPermissions.requestPermissions(this, "您必须授权开启摄像头权限,才能进行下一步操作", 200, perms);
    }
}

 

EasyPermissions.requestPermissions 第二个参数的作用:

当用户第一次拒绝后,第二次再请求权限时,弹出对话框,提示用户请求权限的原因,用户点击确定后,会自动弹出权限的系统请求。



 

 

但坑爹的是,各大手机厂商的定制系统对该逻辑进行了一定的改动,例如红米Note4的MIUI系统当用户首次选择拒绝权限之后就会“不再询问”了,华为EMUI系统在首次弹出权限请求时就会提供“不再询问”的选项。此时就需要判断APP的某个权限是否处于“不再询问”的状态,从而引导用户去APP设置里面开启权限。

 

判断方法是 EasyPermissions.somePermissionPermanentlyDenied

但是务必注意,该方法一定要在得知权限被拒之后执行,原因是该方法就是在判断是否应该出现上方的图片提示,如果权限被拒绝了,同时不允许出现上方的图片提示,则认为该权限的状态就是“不再询问”

 

综上,通过如下第三点,处理不再询问的权限

 

3. 实现 EasyPermissions.PermissionCallbacks,定义权限被拒和允许时的操作,和判断“不再询问”状态

public class FaceIDFontActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {
    // ... some other code ...

    @Override
    public void onPermissionsGranted(int requestCode, List<String> perms) {
        Log.d(TAG, "onPermissionsGranted:" + requestCode + ":" + perms.size());
    }

    @Override
    public void onPermissionsDenied(int requestCode, List<String> perms) {
        Log.d(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 AlertDialog.Builder(this)
                    .setTitle("权限提示")
                    .setMessage("本项认证需要摄像头权限,点击确认后在新页面滑动到最下方,在权限管理处,开启相机权限")
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();
                        }
                    })
                    .setPositiveButton("确认", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // 跳转到APP设置页面
                            Intent intent = new Intent();
                            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                            Uri uri = Uri.fromParts("package", getPackageName(), null);
                            intent.setData(uri);
                            startActivity(intent);
                        }
                    })
                    .create().show();
        }

    }
}

 

 

 

 

 

  • 大小: 53.2 KB
分享到:
评论

相关推荐

    Android 权限检查EasyPermissions

    Android 权限检查EasyPermissions ,Android 6.0之前的系统用户在安装apk文件时会根据app声明的权限声称权限列表,用户只有在同意了申请的权限后才可以继续安装应用。这样就存在了很大的安全隐患。因此在android 6.0...

    官方推荐的android 6.0 权限获取方式(实例demo:easypermissions)

    博客地址:http://blog.csdn.net/u013100574/article/details/53314209。官方推荐的android 6.0 权限获取方式(实例demo:easypermissions)

    easypermission android动态申请权限

    android6.0 开始,权限的申请发生了改变,申请变的动态化,也就是运行时权限,EasyPermission 可以帮助简化权限申请的流程,同时使得代码更加具有逻辑。对申请的结果进行统一的返回。而且当用户拒绝了权限,任然可以...

    Android EasyPermissions官方库高效处理权限相关教程

    Easypermissions简化了Android M的运行时权限的申请、结果处理、判断等步骤。这篇文章主要介绍了Android EasyPermissions官方库高效处理权限相关教程,需要的朋友可以参考下

    EasyPermissions:简化Android M系统权限-开源

    EasyPermissions 是一个包装库,用于在面向 Android M 或更高版本时简化基本系统权限逻辑。 如果您的应用程序是用 Kotlin 编写的,请考虑使用 easypermissions-ktx 库,它将 Kotlin 扩展添加到核心 EasyPermissions ...

    easypermissions:简化Android M系统权限

    EasyPermissions EasyPermissions是一个包装器库,用于简化针对Android M或更高版本的基本系统权限逻辑。 注意:如果您的应用是用Kotlin编写的,请考虑库,该库将Kotlin扩展添加到核心EasyPermissions库中。安装通过...

    android权限检测(简单明了)

    使用的是google提供的库文件easypermissions进行的权限检测,简单好用

    简化Android M系统权限-Android开发

    EasyPermissions EasyPermissions是一个包装库,用于简化针对Android M或更高版本的基本系统权限逻辑。 安装EasyPermissions是通过将以下依赖项添加到yo EasyPermissions中来安装的。EasyPermissions是一个包装库,...

    easypermissions-android:一个简单的库,它将删除所有样板代码,并使用Android M中引入的新的运行时权限来加快工作速度

    运行时权限库(Android) 一个简单的库将删除所有样板代码,并使用Android M中引入的新的运行时权限加快您的工作。支持Android简易权限Android Easy Permissions是一个独立的项目,由于捐款,项目得以持续开发和支持...

    easypermissions-master

    Android M对权限系统进行了改变。Android M之前所需权限只需要在AndroidManifest中申请即可。但更新Android M系统后,部分“Dangerous Permission”需要在运行时询问申请。

    动态申请权限

    有关于Android6.0动态获取权限

    Android代码-BluetoothLELibrary

    English 固件升级/硬件升级/DFU 下载jar文件 该库只支持1对1连接,如果你想1对多设备连接,请移步至 ... Google动态权限开源库:easypermissions Android 7.0扫描蓝牙需要地理位置权限,并且需要开启

    Android6.0仿微信权限设置

    Android 6.0版本对于程序员兄弟来说最不友好的就是权限的问题,动态权限的设置曾经让我很苦恼,目前大部分关于6.0权限设置的框架基本都是一次性访问多个权限(EasyPermissions),这样导致的问题就是如果我们申请了...

    PermissionExample:easyPermission示例,带详细的交互流程图

    EasyPermissions Android权限适配(带流程图)前言阅读前说明:所有系统均为Android原生系统,其他国产ROM最后再讨论。所有的申请都为主动触发,即主动点击申请按钮。申请时,默认是没有权限的。流程图中长方形中为...

    是一个库,完全使用Kotlin语言编写,可帮助处理Android上的运行时权限。-Android开发

    StartaskPermissions StartaskPermissions是一个库,可帮助处理Android上的运行时权限,该库完全使用Kotlin语言编写。 在项目中使用Gradle StartaskPermissions库已发布StartaskPermissions是一个有助于处理Android...

    Android动态获取权限许可简易模板

    String PERMISSION_STORAGE_MSG = 请授予权限,否则影响部分使用功能; int REQUEST_CODE_CONTACT = 101; String[] perms = {Manifest.permission.RECEIVE_SMS}; if (!EasyPermissions.hasPermissions(this, perms)) ...

    android开发权限询问的示例代码

    现在基于信息安全问题,特别是版本是23以上权限越严格。 特别是拍照,读,写权限 一般权限允许过,下次就不用询问了的,所以很多应用都喜欢在首页或者启动页直接询问,不允许的就用不了1、下面给出封装好的类,至于...

    BaseProject:android基础项目

    基础项目:EasyPermissions (v1.2.0)BaseActivity、BaseFragmentActivity栈管理异常信息收集日志打印Android6.0权限管理通用适配器 Gradle依赖dependencies { implementation 'com.classic.android:core:1.6'}基于...

    Android项目源码极客日报一款纯粹的阅读App.zip

    使用EasyPermissions做5.0 动态权限适配 使用原生的夜间模式、分享、反馈 包含搜索、收藏、检测更新等功能 所有踩到的坑都在项目里做了注释 用到的第三方: UI MaterialCalendarView MaterialSearchView ...

Global site tag (gtag.js) - Google Analytics