再谈Android6.0 运行时权限(快速处理)

来源:互联网 发布:mac信仰灯会影响屏幕吗 编辑:程序博客网 时间:2024/06/12 20:09

6.0的运行时权限过去很久了,现在看来这个机制的意义应该是让用户知道了“权限”这么个东西的存在。


Android共有9组隐私权限需要运行时检测。
同一个权限组的任何一个权限被授权了,这个权限组的其他权限也自动被授权。
1.日历 |CALENDAR | READ_CALENDAR,WRITE_CALENDAR |
2.相机 |CAMERA | CAMERA |
3.通讯录 |CONTACTS | READ_CONTACTS,WRITE_CONTACTS,GET_ACCOUNTS |
4.位置 |LOCATION | ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION |
5.话筒 |MICROPHONE | RECORD_AUDIO |
6.打电话 |PHONE | READ_PHONE_STATE,CALL_PHONE,READ_CALL_LOG,
WRITE_CALL_LOG,ADD_VOICEMAIL,USE_SIP,PROCESS_OUTGOING_CALLS |
|SENSORS | BODY_SENSORS |
7.短信 |SMS | SEND_SMS,RECEIVE_SMS,READ_SMS,RECEIVE_WAP_PUSH,RECEIVE_MMS |
8.存储 |STORAGE | READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE |
9.传感器| SENSORS
虽然官方给了九种,但由于国产rom的优化,与官方有差异,部分权限默认不是隐私权限。

运行时检测权限的方法,不再赘述,官方文档,或者百度足矣了解,这里贴上自己封装的运行时权限检测工具(这里为每次只请求单个权限),不正之处还请请指教

先看使用时的例子

        PermiUtils.inspectPermi(mActivity, PermiUtils.LOCATION, new IPermissionCallback() {            @Override            public void onPermissionAgree(int requestCode, String perms) {               //授予了权限要做的操作在这里                    Toast.makeText(mContext, "给予权限="+permiName, Toast.LENGTH_LONG).show();            }            @Override            public void onPermissionReject(int requestCode, String perms) {                    Toast.makeText(mContext, "拒绝权限="+permiName, Toast.LENGTH_LONG).show();            }        });--------------    @Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        PermiUtils.onRequestPermissionsResult(requestCode, permissions, grantResults, mActivity);    }

工具类

public interface IPermissionCallback {    /**     * 给予了权限     * @param requestCode     * @param perms     */    void onPermissionAgree(int requestCode, String perms);    /**     * 拒绝权限     * @param requestCode     * @param perms     */    void onPermissionReject(int requestCode, String perms);}-----------------------------------------------------public class PermiUtils {    /**     * 存储权限     **/    public static final int STORAGE = 1;//存储权限    /**     * 相机权限     **/    public static final int CAMERA = 2;//相机权限    /**     * 位置权限     **/    public static final int LOCATION = 3;//位置权限    /**     * 打电话权限     **/    public static final int PHONE = 4;//打电话权限    /**     * 通讯录权限     **/    public static final int CONTACTS = 5;//通讯录权限    /**     * 话筒权限     **/    public static final int MICROPHONE = 6;//话筒权限    /**     * 日历权限     **/    public static final int CALENDAR = 7;//日历权限    /**     * 短信权限     **/    public static final int SMS = 8;//短信权限    /**     * 传感器     **/    public static final int SENSORS = 9;//传感器    private static IPermissionCallback permissionCallback;    /**     * 检查权限     *     * @param activity     * @param requestCode     */    public static void inspectPermi(Activity activity, int requestCode, IPermissionCallback callback) {        String permiNames = getPermiNames(requestCode);        permissionCallback = callback;        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            if (ActivityCompat.checkSelfPermission(activity, permiNames)                    != PackageManager.PERMISSION_GRANTED) {                AppLog.d("无权限" + permiNames);                //需要权限,告诉用户                ActivityCompat.requestPermissions(activity, new String[]{permiNames}, requestCode);                return;            }        }        if (permissionCallback != null)            permissionCallback.onPermissionAgree(requestCode, permiNames);    }    /**     * 选择回调     *     * @param requestCode     * @param permissions     * @param grantResults     * @param mActivity     */    public static void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults, Activity mActivity) {        if (grantResults.length <= 0 || permissions.length <= 0) {            AppLog.d("权限请求回调异常length<=0");            return;        }        AppLog.d(grantResults[0] + "处理权限" + permissions[0]);        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {            AppLog.d("给予了权限" + permissions[0]);            if (permissionCallback != null)                permissionCallback.onPermissionAgree(requestCode, permissions[0]);        } else {            if (!ActivityCompat.shouldShowRequestPermissionRationale(mActivity, permissions[0])) {                AppLog.d("拒绝授权且不再提醒");                //用户不同意,且勾选了对话框不再提醒            }            AppLog.d("拒绝授权" + permissions[0]);            if (permissionCallback != null)                permissionCallback.onPermissionReject(requestCode, permissions[0]);        }    }    private static String getPermiNames(int requestCode) {        String permiNames = null;        switch (requestCode) {            case STORAGE:                permiNames = Manifest.permission.READ_EXTERNAL_STORAGE;                break;            case CAMERA:                permiNames = Manifest.permission.CAMERA;                break;            case LOCATION:                permiNames = Manifest.permission.ACCESS_FINE_LOCATION;                break;            case PHONE:                permiNames = Manifest.permission.READ_PHONE_STATE;                break;            case CONTACTS:                permiNames = Manifest.permission.READ_CONTACTS;                break;            case MICROPHONE:                permiNames = Manifest.permission.RECORD_AUDIO;                break;            case CALENDAR:                permiNames = Manifest.permission.READ_CALENDAR;                break;            case SMS:                permiNames = Manifest.permission.SEND_SMS;                break;            case SENSORS:                permiNames = Manifest.permission.BODY_SENSORS;                break;        }        return permiNames;    }}
0 0
原创粉丝点击