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(); } } }
相关推荐
Android 权限检查EasyPermissions ,Android 6.0之前的系统用户在安装apk文件时会根据app声明的权限声称权限列表,用户只有在同意了申请的权限后才可以继续安装应用。这样就存在了很大的安全隐患。因此在android 6.0...
博客地址:http://blog.csdn.net/u013100574/article/details/53314209。官方推荐的android 6.0 权限获取方式(实例demo:easypermissions)
android6.0 开始,权限的申请发生了改变,申请变的动态化,也就是运行时权限,EasyPermission 可以帮助简化权限申请的流程,同时使得代码更加具有逻辑。对申请的结果进行统一的返回。而且当用户拒绝了权限,任然可以...
Easypermissions简化了Android M的运行时权限的申请、结果处理、判断等步骤。这篇文章主要介绍了Android EasyPermissions官方库高效处理权限相关教程,需要的朋友可以参考下
EasyPermissions 是一个包装库,用于在面向 Android M 或更高版本时简化基本系统权限逻辑。 如果您的应用程序是用 Kotlin 编写的,请考虑使用 easypermissions-ktx 库,它将 Kotlin 扩展添加到核心 EasyPermissions ...
EasyPermissions EasyPermissions是一个包装器库,用于简化针对Android M或更高版本的基本系统权限逻辑。 注意:如果您的应用是用Kotlin编写的,请考虑库,该库将Kotlin扩展添加到核心EasyPermissions库中。安装通过...
使用的是google提供的库文件easypermissions进行的权限检测,简单好用
EasyPermissions EasyPermissions是一个包装库,用于简化针对Android M或更高版本的基本系统权限逻辑。 安装EasyPermissions是通过将以下依赖项添加到yo EasyPermissions中来安装的。EasyPermissions是一个包装库,...
运行时权限库(Android) 一个简单的库将删除所有样板代码,并使用Android M中引入的新的运行时权限加快您的工作。支持Android简易权限Android Easy Permissions是一个独立的项目,由于捐款,项目得以持续开发和支持...
Android M对权限系统进行了改变。Android M之前所需权限只需要在AndroidManifest中申请即可。但更新Android M系统后,部分“Dangerous Permission”需要在运行时询问申请。
有关于Android6.0动态获取权限
English 固件升级/硬件升级/DFU 下载jar文件 该库只支持1对1连接,如果你想1对多设备连接,请移步至 ... Google动态权限开源库:easypermissions Android 7.0扫描蓝牙需要地理位置权限,并且需要开启
Android 6.0版本对于程序员兄弟来说最不友好的就是权限的问题,动态权限的设置曾经让我很苦恼,目前大部分关于6.0权限设置的框架基本都是一次性访问多个权限(EasyPermissions),这样导致的问题就是如果我们申请了...
EasyPermissions Android权限适配(带流程图)前言阅读前说明:所有系统均为Android原生系统,其他国产ROM最后再讨论。所有的申请都为主动触发,即主动点击申请按钮。申请时,默认是没有权限的。流程图中长方形中为...
StartaskPermissions StartaskPermissions是一个库,可帮助处理Android上的运行时权限,该库完全使用Kotlin语言编写。 在项目中使用Gradle StartaskPermissions库已发布StartaskPermissions是一个有助于处理Android...
String PERMISSION_STORAGE_MSG = 请授予权限,否则影响部分使用功能; int REQUEST_CODE_CONTACT = 101; String[] perms = {Manifest.permission.RECEIVE_SMS}; if (!EasyPermissions.hasPermissions(this, perms)) ...
现在基于信息安全问题,特别是版本是23以上权限越严格。 特别是拍照,读,写权限 一般权限允许过,下次就不用询问了的,所以很多应用都喜欢在首页或者启动页直接询问,不允许的就用不了1、下面给出封装好的类,至于...
基础项目:EasyPermissions (v1.2.0)BaseActivity、BaseFragmentActivity栈管理异常信息收集日志打印Android6.0权限管理通用适配器 Gradle依赖dependencies { implementation 'com.classic.android:core:1.6'}基于...
使用EasyPermissions做5.0 动态权限适配 使用原生的夜间模式、分享、反馈 包含搜索、收藏、检测更新等功能 所有踩到的坑都在项目里做了注释 用到的第三方: UI MaterialCalendarView MaterialSearchView ...