Bleoo

志同道合,一杯酒。

  • 主页
  • 随笔
  • Android

Bleoo

志同道合,一杯酒。

  • 主页
  • 随笔
  • Android

Android运行时权限库PermissionsDispatcher

2017-02-28

简介

该库方便了处理运行时权限的处理问题
github地址:https://github.com/hotchemi/PermissionsDispatcher

Annotation Required Description
@RuntimePermissions ✓ 注册在一个Activity或者Fragment上来处理权限问题
@NeedsPermission ✓ 注解一个方法,该方法执行需要一个或多个权限操作
@OnShowRationale 注解一个解释为什么需要这些若干权限的方法,它通过一个PermissionRequest对象,让用户操作允许或中止当前权限请求
@OnPermissionDenied 注解一个方法,如果用户不授予权限,则调用该方法
@OnNeverAskAgain 注解一个方法,如果用户勾选了”不在询问”,则调用该方法

注意: 注解的方法不能是 private

配置

Android Gradle Plugin >= 2.2

在项目的 app module build.gradle 文件中:

1
2
3
4
dependencies {
compile 'com.github.hotchemi:permissionsdispatcher:2.3.1'
annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.1'
}

Android Gradle Plugin < 2.2

在项目的 project build.gradle 文件中:

1
2
3
4
5
buildscript {
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
1
2
3
4
repositories {
jcenter()
maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
}

以及在项目的 app module build.gradle 文件中:

1
2
3
4
5
6
apply plugin: 'android-apt'
dependencies {
compile 'com.github.hotchemi:permissionsdispatcher:2.3.1'
apt 'com.github.hotchemi:permissionsdispatcher-processor:2.3.1'
}

用法

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
@RuntimePermissions
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// MainActivityPermissionsDispatcher该类会Build时自动生成
MainActivityPermissionsDispatcher.showCameraWithCheck(this);
}
@NeedsPermission({Manifest.permission.CAMERA})
void showCamera() {
Log.e("permissions", "用户允许该权限");
}
@OnShowRationale({Manifest.permission.CAMERA})
void showRationaleForCamera(final PermissionRequest request) {
new AlertDialog.Builder(this)
.setPositiveButton("允许", new DialogInterface.OnClickListener() {
@Override
public void onClick(@NonNull DialogInterface dialog, int which) {
request.proceed();
}
})
.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
@Override
public void onClick(@NonNull DialogInterface dialog, int which) {
request.cancel();
}
})
.setCancelable(false)
.setMessage("能给我相机的权限吗?")
.show();
}
@OnPermissionDenied({Manifest.permission.CAMERA})
void showDeniedForCamera() {
Log.e("permissions", "用户不授予某权限");
}
@OnNeverAskAgain({Manifest.permission.CAMERA})
void showNeverAskForCamera() {
Log.e("permissions", "不再询问");
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// NOTE: delegate the permission handling to generated method
// 此处回调处理
MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
}
  • Android

扫一扫,分享到微信

微信分享二维码
Android动态加载Dex文件入门
Android蓝牙周边设备开发
© 2017 Bleoo
Hexo Theme Yilia by Litten