• android:Android 6.0+ 权限控制代码封装


    新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码
    使用方法:

    package com.glsite.phone;
    
    import android.content.DialogInterface;
    import android.content.pm.PackageManager;
    import android.os.Build;
    import android.support.annotation.NonNull;
    import android.support.v4.app.ActivityCompat;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.Toast;
    
    /**
     * @author Admin
     * @version $Rev$
     * @des ${TODO}
     * @updateAuthor $Author$
     * @updateDes ${TODO}
     */
    public class BaseActivity extends AppCompatActivity {
        //**************** Android M Permission (Android 6.0权限控制代码封装)
        private int permissionRequestCode = 88;
        private PermissionCallback permissionRunnable;
    
        public interface PermissionCallback {
            void hasPermission();
    
            void noPermission();
        }
    
        /**
         * Android M运行时权限请求封装
         *
         * @param permissionDes 权限描述
         * @param runnable      请求权限回调
         * @param permissions   请求的权限(数组类型),直接从Manifest中读取相应的值,比如Manifest.permission.WRITE_CONTACTS
         */
        public void performCodeWithPermission(@NonNull String permissionDes, PermissionCallback runnable, @NonNull String... permissions) {
            if (permissions == null || permissions.length == 0)
                return;
            //        this.permissionrequestCode = requestCode;
            this.permissionRunnable = runnable;
            if ((Build.VERSION.SDK_INT < Build.VERSION_CODES.M) || checkPermissionGranted(permissions)) {
                if (permissionRunnable != null) {
                    permissionRunnable.hasPermission();
                    permissionRunnable = null;
                }
            } else {
                //permission has not been granted.
                requestPermission(permissionDes, permissionRequestCode, permissions);
            }
    
        }
    
        private boolean checkPermissionGranted(String[] permissions) {
            boolean flag = true;
            for (String p : permissions) {
                if (ActivityCompat.checkSelfPermission(this, p) != PackageManager.PERMISSION_GRANTED) {
                    flag = false;
                    break;
                }
            }
            return flag;
        }
    
        private void requestPermission(String permissionDes, final int requestCode, final String[] permissions) {
            if (shouldShowRequestPermissionRationale(permissions)) {
                /*1. 第一次请求权限时,用户拒绝了,下一次:shouldShowRequestPermissionRationale()  返回 true,应该显示一些为什么需要这个权限的说明
                2.第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时:shouldShowRequestPermissionRationale()  返回 false
                3. 设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale()  返回 false*/
                // Provide an additional rationale to the user if the permission was not granted
                // and the user would benefit from additional context for the use of the permission.
                // For example, if the request has been denied previously.
    
                //            Snackbar.make(getWindow().getDecorView(), requestName,
                //                    Snackbar.LENGTH_INDEFINITE)
                //                    .setAction(R.string.common_ok, new View.OnClickListener() {
                //                        @Override
                //                        public void onClick(View view) {
                //                            ActivityCompat.requestPermissions(BaseAppCompatActivity.this,
                //                                    permissions,
                //                                    requestCode);
                //                        }
                //                    })
                //                    .show();
                //如果用户之前拒绝过此权限,再提示一次准备授权相关权限
                new AlertDialog.Builder(this)
                        .setTitle("提示")
                        .setMessage(permissionDes)
                        .setPositiveButton("授权", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode);
                            }
                        }).show();
    
            } else {
                // Contact permissions have not been granted yet. Request them directly.
                ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode);
            }
        }
    
        private boolean shouldShowRequestPermissionRationale(String[] permissions) {
            boolean flag = false;
            for (String p : permissions) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(this, p)) {
                    flag = true;
                    break;
                }
            }
            return flag;
        }
    
        /**
         * Callback received when a permissions request has been completed.
         */
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                               @NonNull int[] grantResults) {
            if (requestCode == permissionRequestCode) {
                if (verifyPermissions(grantResults)) {
                    if (permissionRunnable != null) {
                        permissionRunnable.hasPermission();
                        permissionRunnable = null;
                    }
                } else {
                    Toast.makeText(this, "暂无权限执行相关操作!", Toast.LENGTH_SHORT).show();
                    if (permissionRunnable != null) {
                        permissionRunnable.noPermission();
                        permissionRunnable = null;
                    }
                }
            } else {
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            }
    
        }
    
        public boolean verifyPermissions(int[] grantResults) {
            // At least one result must be checked.
            if (grantResults.length < 1) {
                return false;
            }
    
            // Verify that each required permission has been granted, otherwise return false.
            for (int result : grantResults) {
                if (result != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
            return true;
        }
        //********************** END Android M Permission ****************************************
    }
    
  • 相关阅读:
    华为机试:字符串翻转
    华为机试:数字颠倒
    华为机试:字符个数统计
    华为机试:提取不重复的整数
    华为机试:取近视值
    华为机试:进制转换
    华为机试:字符串分隔
    华为机试:明明的随机数
    华为机试:字符串最后一个单词的长度
    网易:相反数
  • 原文地址:https://www.cnblogs.com/wbyixx/p/12285668.html
Copyright © 2020-2023  润新知