动态权限申请

集成

在progect下的build.gradle中配置

allprojects {
    repositories {
        google()
        jcenter()
        //权限申请配置
        maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
    }
}

在module(app)下的build.gradle中配置

    //动态权限申请
    implementation('com.github.hotchemi:permissionsdispatcher:3.3.1') {
        // if you don't use android.app.Fragment you can exclude support for them
        exclude module: "support-v13"
    }
    annotationProcessor "com.github.hotchemi:permissionsdispatcher-processor:3.3.1"

使用


/**
 * Created by zxt on 2018/6/14/014.
 * Desc : 项目主页面
 */
//	注册Activity或Fragment(我们支持两者)来处理权限
// 这是必须使用的注解
@RuntimePermissions
public class MainActivity extends BaseActivity {

    //初始化
    @Override
    public void init() {
        //检查权限
        MainActivityPermissionsDispatcher.showPermissionWithPermissionCheck(this);
    }

    /**
     * @author zxt
     * creartd at 2018/7/5/005 9:45
     * 注释执行需要一个或多个权限的操作的方法
     */
    //这也是必须使用的注解,用于标注在你要获取权限的方法,
    // 注解括号里面有参数,传入想要申请的权限。也就是说你获取了相应的权限之后就会执行这个方法:
    @NeedsPermission({Manifest.permission.CAMERA,
            Manifest.permission.CALL_PHONE,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.WRITE_EXTERNAL_STORAGE})
    void showPermission() {
//        getSupportFragmentManager().beginTransaction()
//                .replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())
//                .addToBackStack("camera")
//                .commitAllowingStateLoss();
    }

    /**
     * @author zxt
     * creartd at 2018/7/5/005 9:46
     * 注释一个解释为什么需要权限的方法。它传入一个PermissionRequest对象
     * 该对象可用于在用户输入时继续或中止当前的权限请求
     */
    //这个不是必须的注解,用于标注申请权限前需要执行的方法,
    //注解括号里面有参数,传入想要申请的权限,而且这个方法还要传入一个PermissionRequest对象,
    // 这个对象有两种方法:proceed()让权限请求继续,cancel()让请求中断。
    // 也就是说,这个方法会拦截你发出的请求,这个方法用于告诉用户你接下来申请的权限是干嘛的,说服用户给你权限。
    @OnShowRationale({Manifest.permission.CAMERA,
            Manifest.permission.CALL_PHONE,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.WRITE_EXTERNAL_STORAGE})
    void showRationaleForPermission(final PermissionRequest request) {
        new AlertDialog.Builder(this)
                .setMessage("直播需要使用摄像头、存储、读取来电状态权限,是否同意授权申请?")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //继续执行请求
                        request.proceed();
                    }
                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //取消执行请求
                request.cancel();
            }
        }).show();
    }
    /**
     * @author zxt
     * creartd at 2018/7/5/005 9:46
     * 注释如果用户未授予权限则调用的方法
     */
    //这个也不是必须的注解,用于标注如果权限请求失败,但是用户没有勾选不再询问的时候执行的方法
    // 注解括号里面有参数,传入想要申请的权限。也就是说,我们可以在这个方法做申请权限失败之后的处理,
    // 如像用户解释为什么要申请,或者重新申请操作等。
    @OnPermissionDenied({Manifest.permission.CAMERA,
            Manifest.permission.CALL_PHONE,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.WRITE_EXTERNAL_STORAGE})
    void showDeniedForPermission() {
        new AlertDialog.Builder(this)
                .setMessage("直播需要使用摄像头、存储、读取来电状态权限,您暂时没有授权,请到设置授权必要权限,以免影响您的使用")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //继续执行请求
                        dialog.cancel();
                    }
                }).setNegativeButton("取消", null).show();
        ToastUtil.showMessage("权限被拒绝,可能会影响部分功能的正常使用");
    }

    /**
     * @author zxt
     * creartd at 2018/7/5/005 9:46
     * 如果用户选择让设备“永不再询问”权限,则注释一个被调用的方法
     */
    //这个也不是必须的注解,用于标注如果权限请求失败,而且用户勾选不再询问的时候执行的方法,
    // 注解括号里面有参数,传入想要申请的权限。也就是说,我们可以在这个方法做申请权限失败并选择不再询问之后的处理。
    // 例如,可以告诉作者想开启权限的就从手机设置里面开启。
    @OnNeverAskAgain({Manifest.permission.CAMERA,
            Manifest.permission.CALL_PHONE,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.WRITE_EXTERNAL_STORAGE})
    void showNeverAskForPermission() {
        ToastUtil.showMessage("权限被拒绝,可能会影响部分功能的正常使用,请打开手机设置授予必要权限");
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值