美文网首页
Android的权限处理(二)动态权限框架——AndPermis

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

作者: Charon_Pluto | 来源:发表于2018-06-13 16:56 被阅读208次

    一.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();
    

    相关文章

      网友评论

          本文标题:Android的权限处理(二)动态权限框架——AndPermis

          本文链接:https://www.haomeiwen.com/subject/jdyasftx.html