美文网首页
android 手动封装动态运行权限

android 手动封装动态运行权限

作者: 了不起的潘 | 来源:发表于2018-06-07 17:50 被阅读0次

    android 6.0以后增加一个重要的适配,动态运行权限,之前我都是采用一些第三方库:PermissionsDispatcher;没啥大问题就是觉得膈应,闲了还是自己动手封装一下:

    总体实现过程:

    1,BaseActivity中加入权限判断以及申请。

    2,需要权限的activity重写BaseActivity中onCall()方法来获得权限成功后要做的事情。

    下面开始具体的实现的过程:

    比如说我们先要获得相机这个权限:

    1,清单文件中先申明。

    image

    2,调用BaseActivity中的setPermission(String permission),方法,

    3,重写BaseActivity的onCall(String permission)的方法。

    image

    那么BaseActivity 中是如何封装的呢?

    image

    申请权限的回调

      @RequiresApi(api = Build.VERSION_CODES.M)
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            if (requestCode == 0 || requestCode == 1){//requestCode = 0 表示申请单个重要权限  = 1 为同时申请多个权限 一般来说不太重要
                for (int i = 0; i < grantResults.length; i++) {
                    if (grantResults[i] == -1){
                        if (shouldShowRequestPermissionRationale(permissions[i])) {
                            /**
                             * 用户拒绝后的操作,这里我们继续提醒用户申请权限(除非是特别特别重要的权限,否则不要这样做!)
                             */
                            if (requestCode == 0){
                                ActivityCompat.requestPermissions(this,new String[]{permissions[i]},0);
                            }else{
                                Toast.makeText(BaseActivity.this, "权限被拒绝: "+permissions[i], Toast.LENGTH_SHORT).show();
                            }
    
                        }else{
                            if (requestCode == 0){
                                /**
                                 * 用户多次拒绝权限并设置了不再提醒,那么只能提醒用户去设置页面打开我们的权限了(除非是特别特别重要的权限,否则不要这样做!)
                                 */
                                final AlertDialog.Builder builder = new AlertDialog.Builder(this);
                                builder.setTitle("说明");
                                builder.setMessage("没有权限将无法使用APP,打开设置页面放开权限");
                                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        /**
                                         * 这里使用了第三方库,用于打开应用的权限设置页面(有各种手机厂商的适配)
                                         *  author : Senh Linsh
                                         *  github : https://github.com/SenhLinsh
                                         */
                                        Utils.init(BaseActivity.this);
                                        IntentUtils.gotoPermissionSetting();
    //                            Intent intent = new Intent();
    //                            intent.setAction(Settings.ACTION_SETTINGS);
    //                            startActivity(intent);
                                    }
                                });
                                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        Toast.makeText(BaseActivity.this, "无法使用APP", Toast.LENGTH_SHORT).show();
                                    }
                                });
                                builder.show();
                            }else{
                                Toast.makeText(BaseActivity.this, "权限被拒绝: "+permissions[i], Toast.LENGTH_SHORT).show();
                            }
                        }
                    }else if(requestCode == 0){
                        onCall(permissions[i]);
                    }
                }
    
                if (requestCode == 1){
                    onCall("");
                }
            }
            else{
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
    
        }
    

    这样就算是简单的封装完成啦~当然这里还有多权限申请的方法:

     /**
         * 检查多个申请权限
         * @param permissionsArray
         */
        public void setPermissionGroup(String[] permissionsArray){
    
            permissionsList = new ArrayList<String>();
            if (Build.VERSION.SDK_INT>23){
    
                for (String permission : permissionsArray) {
                    if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                        permissionsList.add(permission);
                    }
                }
    
               if (permissionsList.size() == 0){
                   onCall("");
               }else{
                   ActivityCompat.requestPermissions(this, permissionsList.toArray(new String[permissionsList.size()]), 1);
               }
    
    
            }else{
                onCall("");
            }
        }
    

    相关文章

      网友评论

          本文标题:android 手动封装动态运行权限

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