Android的权限处理(二)动态权限框架——AndPermis

2018-06-13  本文已影响208人  Charon_Pluto

一.AndPermission权限框架介绍

这是由于有些对客户有潜在危险的权限必须要提示客户,而且要客户同意后才能操作,否则页面会出现类似闪退的情况,在网上找了一些教程后发现AndPermission这个现成的开源库。
在这些里面我感觉AndPermission框架很不错,对权限回调以及相应永远拒绝以后的后续处理都很完善。

官方gitbub地址 :https://github.com/yanzhenjie/AndPermission

二.AndPermission使用前的配置

需要在项目中build.gradle添加依赖


配置文件位置

三.AndPermission的应用

这里面我用的java8的新特性 ladam公式进行对匿名类的缩写。
如果不明白看不懂请去百度ladam公式在java8中的应用

在这里面AndPermission是使用了一个透明的activity来实现回调成功和失败

1.基本用法:

 AndPermission.with(MainActivity.this)
                        .runtime()
                        .permission(Permission.Group.STORAGE)//权限组 存储
                        .rationale((Context context, List<String> data, RequestExecutor executor) -> {})//拒绝一次后重试
                        .onGranted(permission -> {})//权限调用成功后的回调
                        .onDenied(permissions -> {})//权限调用失败后的回调
                        .start();

2. runtime install overlay 三种方法

三个方法的介绍
runtime() 一般的权限组的权限请求
install() 在Android8.0系统以上更新apk的时候,安装未知来源的apk的时候需要。
overlay() 在Android 6或更高的其他应用程序的顶部绘制。需要这个权限android.permission.SYSTEM_ALERT_WINDOW.

3.权限组

一共也就九个
CAMERA // 摄像头权限
SENSORS //传感器权限
MICROPHONE // 录制音频权限
CALENDAR //日历权限
LOCATION //定位权限
STORAGE //存储权限
CONTACTS //通讯录权限
SMS //短信权限
PHONE //电话权限

4.举个例子如果你想做一个打开摄像头进行拍照。

这是在点击按钮的View.OnClickListener事件中进行的

 AndPermission.with(MainActivity.this)
                        .runtime()
                        .permission(Permission.Group.CAMERA)
                        .rationale((Context context, List<String> data, RequestExecutor executor) -> {
                                    new AlertDialog.Builder(context)
                                            .setTitle("权限申请")
                                            .setMessage("这里需要申请" + data.get(0))
                                            .setPositiveButton("好的", new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(DialogInterface dialog, int which) {
                                                    executor.execute();
                                                }
                                            })
                                            .setNegativeButton("取消", null)
                                            .create()
                                            .show();
                                }
                        )
                        .onGranted(permission -> {
                                    Intent intent = new Intent();
                                    // 指定开启系统相机的Action
                                    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
                                    intent.addCategory(Intent.CATEGORY_DEFAULT);
                                    startActivityForResult(intent, 1);
                                }
                        )
                        .onDenied(permissions -> {
                            if (AndPermission.hasAlwaysDeniedPermission(MainActivity.this, permissions)) {
                                new AlertDialog.Builder(MainActivity.this)
                                        .setTitle("权限获取失败")
                                        .setMessage("没有权限该功能不能使用,是否进入应用设置中进行权限中设置!")
                                        .setPositiveButton("好的", (DialogInterface dialog, int which) -> {
                                                    Intent intent = new Intent();
                                                    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                                                    Uri uri = Uri.fromParts("package", AttrGet.getPackageName(), null);
                                                    intent.setData(uri);
                                                    MainActivity.this.startActivity(intent);
                                                }
                                        )
                                        .setNegativeButton("取消", null)
                                        .create()
                                        .show();
                            }else{
                                  Toast.makeText(MainActivity.this, "开启权限失败", Toast.LENGTH_SHORT);
                           }
                        })
                        .start();

5.AndPermission本身提供的跳转设置之后的回调

 AndPermission.permissionSetting(this).onComeback(new Setting.Action() {
                @Override
                public void onAction() {
                  //设置页面跳转回来回调事件
                }
            }).start();
上一篇下一篇

猜你喜欢

热点阅读