推荐一个好用的权限申请框架

1.概述

android6.0以上,google为了系统的安全性,当app用到设计到用户隐私的权限的时候需要进行权限适配,所以我们仅仅在AndroidManifest中声明权限还是不够的。需要手动的进行权限适配。无意中发现了一个权限适配的非常好的框架,推荐给大家使用。

使用方法:在build.gradle中声明 compile 'com.yanzhenjie:permission:1.1.0'  当然我用的是Android studio,要是还用eclipse那只能说你out了。包引入完之后就直接同步工程就可以了。

贴一下主要代码

/**
 * 相机权限申请
 */
private void cameraApply() {
    AndPermission.with(this)
            .permission(Permission.CAMERA)
            .callback(permissionListener)
            .rationale(new RationaleListener() {
                @Override
                public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                    // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                    AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                }
            })
            .start();
}
只需要调用AndPermission类,这个类是链式调用的方式,可以添加一个或者多个Permission,设置callback对权限申请的结果进行监听。rationale方法是用来显示权限申请对话框的,对话框也可以自定义。最后调用start方法,开始进行权限适配。怎么样是不是用起来比原生的好用的多的多。

2.代码

我把Android中所有需要权限适配的权限全部列举出来了,以后方便查找,demo中列举了申请一个权限,多个权限的情况。下面看代码吧:

/**
 * 权限申请activity
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_calendarApply;
    private Button btn_cameraApply;
    private Button btn_contactsApply;
    private Button btn_locationApply;
    private Button btn_microphoneApply;
    private Button btn_phoneApply;
    private Button btn_sensorsApply;
    private Button btn_smsApply;
    private Button btn_storageApply;
    private Button btn_moreApply;

    private static final int REQUEST_CODE_SETTING = 300;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_calendarApply = (Button) findViewById(R.id.btn_calendarApply);
        btn_cameraApply = (Button) findViewById(R.id.btn_cameraApply);
        btn_contactsApply = (Button) findViewById(R.id.btn_contactsApply);
        btn_locationApply = (Button) findViewById(R.id.btn_locationApply);
        btn_microphoneApply = (Button) findViewById(R.id.btn_microphoneApply);
        btn_phoneApply = (Button) findViewById(R.id.btn_phoneApply);
        btn_sensorsApply = (Button) findViewById(R.id.btn_sensorsApply);
        btn_smsApply = (Button) findViewById(R.id.btn_smsApply);
        btn_storageApply = (Button) findViewById(R.id.btn_storageApply);
        btn_moreApply = (Button) findViewById(R.id.btn_moreApply);

        btn_calendarApply.setOnClickListener(this);
        btn_cameraApply.setOnClickListener(this);
        btn_contactsApply.setOnClickListener(this);
        btn_locationApply.setOnClickListener(this);
        btn_microphoneApply.setOnClickListener(this);
        btn_phoneApply.setOnClickListener(this);
        btn_sensorsApply.setOnClickListener(this);
        btn_smsApply.setOnClickListener(this);
        btn_storageApply.setOnClickListener(this);
        btn_moreApply.setOnClickListener(this);
    }

    /**
     * 日历权限申请
     */
    private void calendarApply() {
        AndPermission.with(this)
                .permission(Permission.CALENDAR)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 相机权限申请
     */
    private void cameraApply() {
        AndPermission.with(this)
                .permission(Permission.CAMERA)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 通讯录权限申请
     */
    private void cantactsApply() {
        AndPermission.with(this)
                .permission(Permission.CONTACTS)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 位置权限申请
     */
    private void locationApply() {
        AndPermission.with(this)
                .permission(Permission.LOCATION)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 音频录制权限申请
     */
    private void microphoneApply() {
        AndPermission.with(this)
                .permission(Permission.MICROPHONE)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 电话权限申请
     */
    private void phoneApply() {
        AndPermission.with(this)
                .permission(Permission.PHONE)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 传感器权限申请
     */
    private void sensorsApply() {
        AndPermission.with(this)
                .permission(Permission.SENSORS)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 短信权限申请
     */
    private void smsApply() {
        AndPermission.with(this)
                .permission(Permission.SMS)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 外部存储权限申请
     */
    private void storageApply() {
        AndPermission.with(this)
                .permission(Permission.STORAGE)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 多个权限同时申请
     */
    private void moreApply() {
        AndPermission.with(this)
                .permission(Permission.CAMERA, Permission.STORAGE)
                .callback(permissionListener)
                .rationale(new RationaleListener() {
                    @Override
                    public void showRequestPermissionRationale(int requestCode, Rationale rationale) {
                        // 这里的对话框可以自定义,只要调用rationale.resume()就可以继续申请。
                        AndPermission.rationaleDialog(MainActivity.this, rationale).show();
                    }
                })
                .start();
    }

    /**
     * 回调监听。
     */
    private PermissionListener permissionListener = new PermissionListener() {
        @Override
        public void onSucceed(int requestCode, @NonNull List<String> grantPermissions) {
            Toast.makeText(MainActivity.this, "申请成功", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onFailed(int requestCode, @NonNull List<String> deniedPermissions) {
            // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。
            if (AndPermission.hasAlwaysDeniedPermission(MainActivity.this, deniedPermissions)) {
                // 第一种:用默认的提示语。
                AndPermission.defaultSettingDialog(MainActivity.this, REQUEST_CODE_SETTING).show();
            }
        }
    };

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_calendarApply:
                calendarApply();
                break;
            case R.id.btn_cameraApply:
                cameraApply();
                break;
            case R.id.btn_contactsApply:
                cantactsApply();
                break;
            case R.id.btn_locationApply:
                locationApply();
                break;
            case R.id.btn_microphoneApply:
                microphoneApply();
                break;
            case R.id.btn_phoneApply:
                phoneApply();
                break;
            case R.id.btn_sensorsApply:
                sensorsApply();
                break;
            case R.id.btn_smsApply:
                smsApply();
                break;
            case R.id.btn_storageApply:
                storageApply();
                break;
            case R.id.btn_moreApply:
                moreApply();
                break;
        }
    }
}
怎么样,是不是用起来特别简单,而且功能强大呢。有需要的朋友可以去下载源码


源码地址:https://gitee.com/fireqiang/PermissionApply.git




  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值