6.0以上手机运行时权限第三方PermissionsDispatcher的使用
2017-01-10 10:23
459 查看
PermissionsDispatcher通过注解的方式,动态生成类处理运行时权限。配合插件使用,可自动生成代码。
github地址:https://github.com/hotchemi/PermissionsDispatcher
使用方法如下:
1>将下面这段代码添加到project的build.gradle文件中。
2
3
4
5
1
2
3
4
5
2>将下面的代码添加到app module的build.gradle文件中,${latest.version}填写最新的版本号,目前为2.1.3。
2
3
4
5
6
1
2
3
4
5
6
3>在Andr
d5a0
oid Studio中选择File——Setting——Plugins,搜索PermissionsDispatcher,点击install安装,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/20f8460bc31988a732ca167529b6e889)
4>准备工作已经完成了,下面来进行代码的生成,在Android Studio中选择Code——Generate——Generate Runtime Permissions,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/09/486aa5b64bd081401f4c909b40e471e0)
@NeedsPermission
当申请的权限被用户允许后,调用此方法。
@OnShowRationale
当第一次申请权限时,用户选择拒绝,再次申请时调用此方法,在此方法中提示用户为什么需要这个权限。
@OnPermissionDenied
当申请的权限被用户拒绝后,调用此方法
@OnNeverAskAgain
当用户点击不再询问后,调用此方法。
代码处理如下:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
为了保持兼容性建议使用v4包的兼容方法:
ContextCompat.checkSelfPermission()
ActivityCompat.requestPermissions()
ActivityCompat.OnRequestPermissionsResultCallback
ActivityCompat.shouldShowRequestPermissionRationale()
当targetSdkVersion小于23,但是设备是6.0系统时:
设备权限模型使用老的版本
清单文件中列出的权限只会在安装时询问
用户可以在设置列表中编辑相关权限,这对应用能否正常运行有很大影响
当targetSdkVersion大于等于23,但是设备系统小于6.0时:
设备权限模型使用老的版本
清单文件中列出的权限只会在安装时询问
源码已托管到GitHub上,欢迎Fork,觉得还不错就Start一下吧!
GitHub地址:https://github.com/alidili/PermissionDemo
Demo下载地址:http://download.csdn.net/detail/kong_gu_you_lan/9628379
github地址:https://github.com/hotchemi/PermissionsDispatcher
使用方法如下:
1>将下面这段代码添加到project的build.gradle文件中。
buildscript { dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } }1
2
3
4
5
1
2
3
4
5
2>将下面的代码添加到app module的build.gradle文件中,${latest.version}填写最新的版本号,目前为2.1.3。
apply plugin: 'android-apt' dependencies { compile 'com.github.hotchemi:permissionsdispatcher:${latest.version}' apt 'com.github.hotchemi:permissionsdispatcher-processor:${latest.version}' }1
2
3
4
5
6
1
2
3
4
5
6
3>在Andr
d5a0
oid Studio中选择File——Setting——Plugins,搜索PermissionsDispatcher,点击install安装,如下图所示:
4>准备工作已经完成了,下面来进行代码的生成,在Android Studio中选择Code——Generate——Generate Runtime Permissions,如下图所示:
@NeedsPermission
当申请的权限被用户允许后,调用此方法。
@OnShowRationale
当第一次申请权限时,用户选择拒绝,再次申请时调用此方法,在此方法中提示用户为什么需要这个权限。
@OnPermissionDenied
当申请的权限被用户拒绝后,调用此方法
@OnNeverAskAgain
当用户点击不再询问后,调用此方法。
代码处理如下:
package com.yang.permissiondemo; import android.Manifest; import android.annotation.TargetApi; import android.content.DialogInterface; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; import android.widget.Toast; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import permissions.dispatcher.NeedsPermission; import permissions.dispatcher.OnNeverAskAgain; import permissions.dispatcher.OnPermissionDenied; import permissions.dispatcher.OnShowRationale; import permissions.dispatcher.PermissionRequest; import permissions.dispatcher.RuntimePermissions; @RuntimePermissions public class PermissionsDispatcherActivity extends AppCompatActivity { @Bind(R.id.tv_permission_status) TextView tvPermissionStatus; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_permission); ButterKnife.bind(this); } @OnClick(R.id.btn_request_permission) public void onClick() { requestPermission(); } @TargetApi(Build.VERSION_CODES.M) private void requestPermission() { //申请权限 PermissionsDispatcherActivityPermissionsDispatcher.openCameraWithCheck(this); } @NeedsPermission(Manifest.permission.CAMERA) void openCamera() { tvPermissionStatus.setTextColor(Color.GREEN); tvPermissionStatus.setText("相机权限已申请"); } @OnShowRationale(Manifest.permission.CAMERA) void showRationale(final PermissionRequest request) { new AlertDialog.Builder(this) .setMessage("申请相机权限") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //再次执行请求 request.proceed(); } }) .show(); } @OnPermissionDenied(Manifest.permission.CAMERA) void permissionDenied() { Toast.makeText(this, "权限被拒绝", Toast.LENGTH_SHORT).show(); } @OnNeverAskAgain(Manifest.permission.CAMERA) void neverAskAgain() { Toast.makeText(this, "不再询问", Toast.LENGTH_SHORT).show(); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); PermissionsDispatcherActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults); } }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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
4.兼容性
为了保持兼容性建议使用v4包的兼容方法:ContextCompat.checkSelfPermission()
ActivityCompat.requestPermissions()
ActivityCompat.OnRequestPermissionsResultCallback
ActivityCompat.shouldShowRequestPermissionRationale()
当targetSdkVersion小于23,但是设备是6.0系统时:
设备权限模型使用老的版本
清单文件中列出的权限只会在安装时询问
用户可以在设置列表中编辑相关权限,这对应用能否正常运行有很大影响
当targetSdkVersion大于等于23,但是设备系统小于6.0时:
设备权限模型使用老的版本
清单文件中列出的权限只会在安装时询问
5.写在最后
源码已托管到GitHub上,欢迎Fork,觉得还不错就Start一下吧!GitHub地址:https://github.com/alidili/PermissionDemo
Demo下载地址:http://download.csdn.net/detail/kong_gu_you_lan/9628379
相关文章推荐
- Android 6.0运行时权限第三方库的使用-----RxPermissions
- Android运行时权限使用详解(适用于Android 6.0及以上)
- RxPermissions源码分析:使用RxJava处理Android 6.0运行时动态权限获取
- 【译】Android开发者应该知道的API6.0以上运行时权限
- AndPermission 完美解决6.0运行时权限(非常好用,对付各种品牌手机)
- android 6.0以上版本 运行时权限
- 知乎开源的图片选择器 Matisse 在 6.0 以上手机使用相机功能
- Android 6.0及以上版本的运行时权限介绍
- Android 6.0 运行时权限 在实际商业项目中的使用
- Android 6.0运行时权限的申请使用及EasyPermissions的使用
- Android 6.0以上 需要运行时申请的权限(二)
- (6.0及以上)运行时获取危险权限(Dangerous Permission)
- Android API23(6.0)以上手机必须手动检测读取权限
- Android M 6.0以上 需要运行时申请的权限--easypermissions库
- 安卓学习笔记--- Android 6.0运行时权限的申请使用及EasyPermissions的使用
- Android 6.0及以上版本的运行时权限介绍
- RxPermissions源码分析:使用RxJava处理Android 6.0运行时动态权限获取
- Android API23(6.0)以上手机必须手动检测读取权限
- Android学习_6.0以上系统的运行时权限
- android 6.0及以上 运行时权限申请(动态权限申请)