一个简单的6.0权限封装

来源:互联网 发布:淘宝图片空间删除错了 编辑:程序博客网 时间:2024/05/22 14:16
public class PermissionUtils {    private static PermissionUtils instance;    private Activity activity;    private int REQUEST_CODE_PERMISSION = 0x00011;    private PermissionCallback callback;    private PermissionUtils(Activity activity){        this.activity=activity;    }    public static PermissionUtils getInstance(Activity activity){        if (instance==null){            synchronized (PermissionUtils.class){                if (instance==null)                    instance=new PermissionUtils(activity);            }        }        return instance;    }    /**     * 请求权限     *     * @param permissions 请求的权限     * @param requestCode 请求权限的请求码     */    public void requestPermission(String[] permissions, int requestCode,PermissionCallback callback) {        this.REQUEST_CODE_PERMISSION = requestCode;        this.callback=callback;        if (checkPermissions(permissions)) {            callback.permissionSuccess(REQUEST_CODE_PERMISSION);        } else {            List<String> needPermissions = getDeniedPermissions(permissions);            ActivityCompat.requestPermissions(activity, needPermissions                    .toArray(new String[needPermissions.size()]), REQUEST_CODE_PERMISSION);        }    }    /**     * 设置权限回调     * @param requestCode 请求权限的请求码     * @param grantResults 请求权限的结果集     */    public void setPermissionCallBack(int requestCode,int[] grantResults){        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {            return;        }        if (requestCode == REQUEST_CODE_PERMISSION) {            if (verifyPermissions(grantResults)) {                callback.permissionSuccess(REQUEST_CODE_PERMISSION);            } else {                callback.permissionFail(REQUEST_CODE_PERMISSION);                showTipsDialog();            }        }    }    /**     * 检测所有的权限是否都已授权     *     * @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(activity, 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(activity, permission) !=                    PackageManager.PERMISSION_GRANTED ||                    ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)) {                needRequestPermissionList.add(permission);            }        }        return needRequestPermissionList;    }    /**     * 确认所有的权限是否都已授权     *     * @param grantResults     * @return     */    private boolean verifyPermissions(int[] grantResults) {        for (int grantResult : grantResults) {            if (grantResult != PackageManager.PERMISSION_GRANTED) {                return false;            }        }        return true;    }    /**     * 显示提示对话框     */    private void showTipsDialog() {        new AlertDialog.Builder(activity)                .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();    }    /**     * 启动当前应用设置页面     */    private void startAppSettings() {        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);        intent.setData(Uri.parse("package:" + activity.getPackageName()));        activity.startActivity(intent);    }    public interface PermissionCallback{        void permissionSuccess(int requestCode);        void permissionFail(int requestCode);    }}

2 0
原创粉丝点击