当前位置: 首页 > news >正文

android 手机权限管理——PermissionsDispatcher

Android6.0 之后某些权限需要动态申请,相比于之前版本复杂了许多。不过已经有大神给我们写好了框架(PermissionsDispatcher),我们用起来还是很方便。

1、添加引用

  根据 gradle 版本进行如下配置:

  如果 Android Gradle Plugin >=2.2

  在 app 模块下的 build.gradle 添加下面的配置:

compile 'com.github.hotchemi:permissionsdispatcher:2.3.2'
  annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.2'
View Code

    Android Gradle Plugin <2.2

  需要额外在项目层级下的 build.gradle 添加下面配置:

buildscript {
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}
View Code

 

2、使用 五种注解(注解的方法不能是private)

 

注解是否必须描述
@RuntimePermissions注册一个 Activity 或 Fragment 用于处理权限
@NeedsPermission注解一个方法,说明需要什么权限(一个或多个)
@OnShowRationale 注解一个方法,解释为什么需要这些权限
@OnPermissionDenied 注解一个方法,当用户拒绝授权时将调用该方法
@OnNeverAskAgain 注解一个方法,当用户选择了 "不再提醒" 将调用该方法

  示例代码

@RuntimePermissions 
public class MainActivity extends AppCompatActivity {

    // 单个权限
    // @NeedsPermission(Manifest.permission.CAMERA)
    // 多个权限
    @NeedsPermission({ Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO })
    void showCamera() {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())
                .addToBackStack("camera")
                .commitAllowingStateLoss();
    }

    // 向用户说明为什么需要这些权限(可选)
    @OnShowRationale(Manifest.permission.CAMERA)
    void showRationaleForCamera(final PermissionRequest request) {
        new AlertDialog.Builder(this)
            .setMessage(R.string.permission_camera_rationale)
            .setPositiveButton(R.string.button_allow, (dialog, button) -> request.proceed())
            .setNegativeButton(R.string.button_deny, (dialog, button) -> request.cancel())
            .show();
    }

    // 用户拒绝授权回调(可选)
    @OnPermissionDenied(Manifest.permission.CAMERA)
    void showDeniedForCamera() {
        Toast.makeText(this, R.string.permission_camera_denied, Toast.LENGTH_SHORT).show();
    }

    // 用户勾选了“不再提醒”时调用(可选)
    @OnNeverAskAgain(Manifest.permission.CAMERA)
    void showNeverAskForCamera() {
        Toast.makeText(this, R.string.permission_camera_neverask, Toast.LENGTH_SHORT).show();
    }
}

作者:linchaolong
链接:http://www.jianshu.com/p/64e7334cde11
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Code

 

 

 

 

  

转载于:https://www.cnblogs.com/Jett/p/7746094.html

相关文章:

  • 页面加载展示PDF
  • git学习笔记
  • 沉淀,再出发:Java基础知识汇总
  • final 总结
  • Swagger结合mustache模板生成后台接口代码、以及前后台建模代码
  • Java 6中的synchronized
  • less匹配模式
  • 聊聊世界编程语言排行榜的事
  • CF467C George and Job
  • EF6 CodeFirst使用MySql
  • java面试题干货96-125
  • 计算机专业的男女问题
  • 夕阳下,归校的背影
  • 小程序之map地图上不能在覆盖层
  • 大家好,我是新人,请多多关照,(*  ̄3)(ε ̄ *)么么
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • css选择器
  • javascript面向对象之创建对象
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Protobuf3语言指南
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Vue 重置组件到初始状态
  • 闭包--闭包作用之保存(一)
  • 当SetTimeout遇到了字符串
  • 关于extract.autodesk.io的一些说明
  • 山寨一个 Promise
  • 深度学习在携程攻略社区的应用
  • 双管齐下,VMware的容器新战略
  • 用Visual Studio开发以太坊智能合约
  • 优化 Vue 项目编译文件大小
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在Mac OS X上安装 Ruby运行环境
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • #NOIP 2014# day.1 T2 联合权值
  • #Ubuntu(修改root信息)
  • $().each和$.each的区别
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C++)八皇后问题
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (三) diretfbrc详解
  • (转) RFS+AutoItLibrary测试web对话框
  • *** 2003
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • @Controller和@RestController的区别?
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [AR]Vumark(下一代条形码)
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [C++]AVL树怎么转