博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android权限适配方案(API 4+)
阅读量:4074 次
发布时间:2019-05-25

本文共 4357 字,大约阅读时间需要 14 分钟。

由于Android6.0 加入了权限判断,如果你的项目buildToolsVersion是23+的话而没有做权限适配,那么程序就会崩溃;本文介绍的是笔者的权限适配的方案

首先我用的工具是github上我用重写的 那个项目是用kotlin写的,感谢 (为什么去重写呢,因为小米与与官方的权限判断有点不同,然后向hotchemi大神请求加上小米手机的特别判断,但是人家不同意啊,因为他是日本的没有小米手机无法测试什么的) 
地址: 
这是个很好的权限适配工具,支持到API 4+;在大部分手机上管用,并且我加入了小米手机权限的判断但只在6.0以上的小米手机管用

在此说明一点这个工具必须在 Studio 2.0+版本使用,以前的版本使用会报莫名的bug,使用很蛋疼

导入方法: 
在项目的buid.gradle文件里添加

buildscript {  dependencies {    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

然后在Module的build.gradle文件中添加依赖和属性配置

apply plugin: 'android-apt'dependencies {   compile 'org.jokar:permissiondispatcher:latest.version'  apt 'org.jokar:permissiondispatcher-processor:latest.version'}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里的latest.version也可以写成具体的版本号,具体的版本号地址在

ok导入好了,要介绍这个工具怎么使用了, 
首先介绍这个工具有哪些东西

这里写图片描述

  • @RuntimePermissions 是必须的注册当前activity或fragment
  • @NeedsPermission 是必须要有的,在需要权限的方法上添加
  • @OnShowRationale 注释一个方法解释为什么需要这个(个)权限并提示用户判断是否允许
  • @OnPermissionDenied 当权限被拒绝时调用
  • @OnNeverAskAgain 当用户勾选了不再提示时调用

这就是这个权限工具的所有功能 
使用方法:

@RuntimePermissionspublic class MainActivity extends AppCompatActivity {    @NeedsPermission(Manifest.permission.CAMERA)    void showCamera() {        getSupportFragmentManager().beginTransaction()                .replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())                .addToBackStack("camera")                .commitAllowingStateLoss();    }    @OnShowRationale(Manifest.permission.CAMERA)    void showRationaleForCamera(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();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

在acttivty/fragment 上添加@RuntimePermissions然后在需要权限的方法上添加@NeedsPermission,其他的根据需求添加;后一定要先点击Rebuild project

等build好后在onRequestPermissionsResult方法添加

@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {    super.onRequestPermissionsResult(requestCode, permissions, grantResults);    // NOTE: delegate the permission handling to generated method    MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里MainActivityPermissionsDispatcher 的命名规则是根据当前activity/fragent +”PermissionsDispatcher” ;所以在自己写的时候不要死板硬套写MainActivityPermissionsDispatcher

然后这就注册好了,下面是怎么调用那个权限方法

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    findViewById(R.id.button_camera).setOnClickListener(v -> {      // NOTE: delegate the permission handling to generated method      MainActivityPermissionsDispatcher.showCameraWithCheck(this);    });    findViewById(R.id.button_contacts).setOnClickListener(v -> {      // NOTE: delegate the permission handling to generated method      MainActivityPermissionsDispatcher.showContactsWithCheck(this);    });}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

如上所说当前activity/fragment +"PermissionsDispatcher".你注册的方法名

就这么简单完成了权限适配; 
然后再介绍一个配合这个工具使用的AS插件,让这个工具使用起来非常方便 插件名字叫做”PermissionsDispatcher plugin” 
使用方法: 
在activity/fragment页面 
alert+insert(windows) 
command + n (mac) 
运行效果如下: 
这里写图片描述

最后感谢此工具的原作者

你可能感兴趣的文章
Redis与Memcached的区别
查看>>
程序员最核心的竞争力是什么?
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>