ndroid 6.0 新增加了运行时的动态添加权限,在此介绍一个第三方库,PermissionGen,可以很方便简洁的增加 6.0权限

首先给大家上  PermissionGen 库地址:https://github.com/lovedise/PermissionGen

下面给大家详细介绍它的使用:

1.引用库:

在 app gradle 中引入:

compile 'com.lovedise:permissiongen:0.0.6'

在需要权限检测的地方 调用:

  1. private void requestPhotoPermiss(){
  2. PermissionGen.with(mContext)
  3. .addRequestCode(PHOTO_PERMISS)
  4. .permissions(
  5. Manifest.permission.WRITE_EXTERNAL_STORAGE,
  6. Manifest.permission.CAMERA)
  7. .request();
  8. }

其中  PermissionGen.with(mContext) 中的 mContext 可以是 Activity,也可以是 Fragment  ,photo_permiss 这个常量是自己定义的,之后需要重写

onRequestPermissionsResult

方法,重写如下:

  1. @Override
  2. public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
  3. PermissionGen.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
  4. }

之后会异步返回两个方法,成功和失败,它们是用注解写的,方法里注解的requestCode 要和你之前定义的常量一致’,方法如下

  1. @PermissionSuccess(requestCode = PHOTO_PERMISS)
  2. public void requestPhotoSuccess(){
  3. //成功之后的处理
  4. //.......
  5. }
  6.  
  7. @PermissionFail(requestCode = PHOTO_PERMISS)
  8. public void requestPhotoFail(){
  9. //失败之后的处理,我一般是跳到设置界面
  10. AppUtil.goToSetting(mContext);
  11. }

goToSetting(Context Context)方法代码如下:

  1. /***
  2. * 去设置界面
  3. */
  4. public static void goToSetting(Context context){
  5. //go to setting view
  6. Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  7. Uri uri = Uri.fromParts("package", getPackageName(), null);
  8. intent.setData(uri);
  9. context.startActivity(intent);
  10. }

注意,在引入  Gen的库的时候,可能会出现同步失败的问题,出现如下类似问题:

Error:(7, 9) Attribute application@icon value=(@mipmap/ic_launcher) from AndroidManifest.xml:7:9
Error:(7, 9) Execution failed for task ':importdemo:processDebugManifest'.
> Manifest merger failed : Attribute application@icon value=(@mipmap/ic_launcher) from AndroidManifest.xml:7:9
is also present at com.pnikosis:materialish-progress:1.0:13:9 value=(@drawable/ic_launcher)
Suggestion: add 'tools:replace="android:icon"' to <application> element a

这是由于 库中引用的 value 和 你项目中 mainfast 中的 value 发生冲突,解决办法如下:

在你的 application 中加上 类似的 tools replace 代码,然后在 xml 文件头 添上 tools 的声明,rebuild 你的项目即可解决冲突

最后要说的是,其实最近网上用的比较 多的库 是 AndPermission 库,但是我当时在引用的时候发现 他的 success 和
failed 方法没有调用,由于时间紧急,便用了这个比较老的库,但是库虽老,用起来还是不错的,对于 AndPermission
库的使用大家若出现和我一样的问题,欢迎讨论,再此附上 AndPermission 库地址:

https://github.com/yanzhenjie/AndPermission

大家有什么交流的话,随时留言,谢谢诶

6.0动态加载权限用PermissionGen的更多相关文章

  1. shiro不重启动态加载权限

    最近一朋友让我帮他做一个后台权限管理的项目.我就在我原来的项目加加改改但是还是不理想,查了不少资料也走了不了弯路...... shiro基本的配置我就不多说了这个很简单自己查查资料就完成----下面是 ...

  2. SpringBoot集成Shiro 实现动态加载权限

    一.前言 本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权限,不用重启项目,以及在页面分配给用户 角色 . 按钮 .ur ...

  3. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  4. 基于xml 实现动态加载权限功能树列表---EFSFrame企业级开发架构

    在学习EFSFrame框架的过程中,感触最深的就是通过xml来实现前台与后台数据的交互,页面设计灵活,不用管后台如何写的,前台与后台的交互唯一的交互通道都是xml,在我们需要添加页面.添加规定的格式的 ...

  5. java反射动态加载类Class.forName();

    1,所有的new出来的对象都是静态加载的,在程序编译的时候就会进行加载.而使用反射机制Class.forName是动态加载的,在运行时刻进行加载. 例子:直接上两个例子 public class Ca ...

  6. Asp.Net Core 项目实战之权限管理系统(8) 功能菜单的动态加载

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  7. 利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载

    简述 可能大家都知道,php中有一个函数叫debug_backtrace,它可以回溯跟踪函数的调用信息,可以说是一个调试利器. 好,来复习一下 01 one(); 02 03 function one ...

  8. (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】

    原文地址:http://www.cnblogs.com/melonblog/archive/2013/05/09/3062303.html 原文作者:豆浆油条 - melon 本文示例代码测试环境是W ...

  9. Vue + Element UI 实现权限管理系统 前端篇(十):动态加载菜单

    动态加载菜单 之前我们的导航树都是写死在页面里的,而实际应用中是需要从后台服务器获取菜单数据之后动态生成的. 我们在这里就用上一篇准备好的数据格式Mock出模拟数据,然后动态生成我们的导航菜单. 接口 ...

随机推荐

  1. python系列二:python3基本数据类型

    #标准数据类型——number(数字)a, b, c = 1, 2.2, "hello"print(a, end = ", ")print(b, end = & ...

  2. Date、Calendar、DateFormat、SimpleDateFormat、Timer、TimerTask类

    类 Date 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值. 它也允许格式化和解析日期字符串.不过,这些函数的 API 不易于实现国际化.从 ...

  3. ASP-DateAdd时间增加

    ASP内置函数DateAdd(interval, number, date) 1.interval标识你要加的日期部分,具体参数如下:yyyy → 年m → 月d → 日h → 小时n → 分钟s → ...

  4. js模块化方法的写法

    详细:一点点白 http://www.cnblogs.com/LoveOrHate/p/4454852.html 原始写法: function m1(){} function m2(){} 对象写法: ...

  5. Delphi重定义的消息结构

    // 除去DDE和MDI消息,一共159个消息,其中部分消息仅仅的转定义 // 普通消息,有两个参数和结果 PMessage = ^TMessage; TMessage = packed record ...

  6. centos添加定时任务

    安装crontab: yum install crontabs 查看crontab服务状态:service crond status 手动启动crontab服务:service crond start ...

  7. 在GCE上安装Apache、tomcat等

    1.安装Apache2.2.3 (虚机的操作系统是CentOS7) sudo yum install wget -y cd /opt sudo wget http://archive.apache.o ...

  8. JAVA ArraySet<E> SET形式的有序LIST

    Set形式的数组,数组内容重复 package com.sicdt.library.core.utils; import java.util.ArrayList; import java.util.C ...

  9. Linux文件系统管理 fdisk分区命令

    概述 我们在安装操作系统的过程中已经对系统硬盘进行了分区,但是如果我新添加了一块硬盘,想要正常使用时,在Linux中有专门的分区命令 fdisk 和 parted.其中 fdisk 命令较为常用,但不 ...

  10. Django组件 用户认证,form

    auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户输入的密码,这样一来就要自己编写大量的代码 ...