zoukankan      html  css  js  c++  java
  • 封装一个MPermissionsActivity的思路和步骤

    http://blog.csdn.net/longkehuawei/article/details/53202804

    第一步:检测所有的权限是否都已授权

     /**
          * 检测所有的权限是否都已授权
          *
          * @param permissions
          * @return
          */
         private boolean checkPermissions(String[] permissions) {
             if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                 return true;
             }
    
             for (String permission : permissions) {
                 if (ContextCompat.checkSelfPermission(this, permission) !=
                         PackageManager.PERMISSION_GRANTED) {
                     return false;
                 }
             }
             return true;
         }

    第二步:获取权限集中需要申请权限的列表

    /**
         * 获取权限集中需要申请权限的列表
         *
         * @param permissions
         * @return
         */
        private List<String> getDeniedPermissions(String[] permissions) {
            List<String> needRequestPermissionList = new ArrayList<>();
            for (String permission : permissions) {
                if (ContextCompat.checkSelfPermission(this, permission) !=
                        PackageManager.PERMISSION_GRANTED ||
                        ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
                    needRequestPermissionList.add(permission);
                }
            }
            return needRequestPermissionList;
        }

    第三步:请求权限

    /**
         * 请求权限
         *
         * @param permissions 请求的权限
         * @param requestCode 请求权限的请求码
         */
        public void requestPermission(String[] permissions, int requestCode) {
            this.REQUEST_CODE_PERMISSION = requestCode;
            if (checkPermissions(permissions)) {
                permissionSuccess(REQUEST_CODE_PERMISSION);
            } else {
                List<String> needPermissions = getDeniedPermissions(permissions);
                ActivityCompat.requestPermissions(this, needPermissions.toArray(new String[needPermissions.size()]), REQUEST_CODE_PERMISSION);
            }
        }

    第四步:处理权限请求回调

    /**
         * 系统请求权限回调
         *
         * @param requestCode
         * @param permissions
         * @param grantResults
         */
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if (requestCode == REQUEST_CODE_PERMISSION) {
                if (verifyPermissions(grantResults)) {
                    permissionSuccess(REQUEST_CODE_PERMISSION);
                } else {
                    permissionFail(REQUEST_CODE_PERMISSION);
                    showTipsDialog();
                }
            }
        }

    第五步:查看处理权限请求回调用户是否已经授权

    /**
         * 确认所有的权限是否都已授权
         *
         * @param grantResults
         * @return
         */
        private boolean verifyPermissions(int[] grantResults) {
            for (int grantResult : grantResults) {
                if (grantResult != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
            return true;
        }

    第六步:授权成功处理函数

    /**
         * 获取权限成功
         *
         * @param requestCode
         */
        public void permissionSuccess(int requestCode) {
            Log.d(TAG, "获取权限成功=" + requestCode);
    
        }

    第七步:授权失败处理函数与弹出用户提示

    /**
         * 权限获取失败
         * @param requestCode
         */
        public void permissionFail(int requestCode) {
            Log.d(TAG, "获取权限失败=" + requestCode);
        }
    
        /**
         * 显示提示对话框
         */
        private void showTipsDialog() {
            new AlertDialog.Builder(this)
                    .setTitle("提示信息")
                    .setMessage("当前应用缺少必要权限,该功能暂时无法使用。如若需要,请单击【确定】按钮前往设置中心进行权限授权。")
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    })
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            startAppSettings();
                        }
                    }).show();
        }

    第八步:授权失败给用户提示后想再次开启跳到设置app权限界面

      /**
         * 启动当前应用设置页面
         */
        private void startAppSettings() {
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivity(intent);
    }
  • 相关阅读:
    管理 node 版本,选择 nvm 还是 n?
    JDBC性能优化方案
    JDBC基础-setFetchSize方法
    JDBC的fetchsize和maxrows
    正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果
    10种简单的Java性能优化
    35+ 个 Java 代码性能优化总结
    一线架构师带你玩性能优化
    诊断Java代码中常见的数据库性能热点问题应该这么做!
    十个 JDBC 的最佳实践
  • 原文地址:https://www.cnblogs.com/wcLT/p/7833931.html
Copyright © 2011-2022 走看看