Android6.0的权限问题

来源:互联网 发布:泉州师范学院软件学院 编辑:程序博客网 时间:2024/05/22 10:41

最近解决了Android6.0的权限问题,查了许多资料,也看了好多许多大神博客,现在梳理一下,总结为自己的问题。

一.检测权限的地方

我的项目:写在基类里面(BaseActivity:所有Activity继承的类)

二.代码如下:

    /**     * 需要进行检测的权限数组     */    protected String[] needPermissions = {            Manifest.permission.ACCESS_COARSE_LOCATION,            Manifest.permission.ACCESS_FINE_LOCATION,            Manifest.permission.WRITE_EXTERNAL_STORAGE,            Manifest.permission.READ_EXTERNAL_STORAGE,            Manifest.permission.READ_PHONE_STATE    };    /**     * 判断是否需要检测,防止不停的弹框     * true弹出权限框,false不弹出权限     */    private boolean isNeedCheck = true;    @Override    protected void onResume() {        super.onResume();        if(isNeedCheck){            checkPermissions(needPermissions);        }    }    /**     * 判断权限,若无权限则弹框     * @param permissions     */    private void checkPermissions(String... permissions) {        List<String> needRequestPermissonList = findDeniedPermissions(permissions);        if (null != needRequestPermissonList                && needRequestPermissonList.size() > 0) {            ActivityCompat.requestPermissions(this,                    needRequestPermissonList.toArray(                            new String[needRequestPermissonList.size()]),                    PERMISSON_REQUESTCODE);        }    }    /**     * 获取权限集中需要申请权限的列表     * @param permissions     */    private List<String> findDeniedPermissions(String[] permissions) {        List<String> needRequestPermissonList = new ArrayList<String>();        for (String perm : permissions) {            if (ContextCompat.checkSelfPermission(this,                    perm) != PackageManager.PERMISSION_GRANTED) {                needRequestPermissonList.add(perm);            } else {                if (ActivityCompat.shouldShowRequestPermissionRationale(                        this, perm)) {                    needRequestPermissonList.add(perm);                }            }        }        return needRequestPermissonList;    }    /**     * 检测是否说有的权限都已经授权     * @param grantResults     * @return     */    private boolean verifyPermissions(int[] grantResults) {        for (int result : grantResults) {            if (result != PackageManager.PERMISSION_GRANTED) {                return false;            }        }        return true;    }    @Override    public void onRequestPermissionsResult(int requestCode,                                           String[] permissions, int[] paramArrayOfInt) {        if (requestCode == PERMISSON_REQUESTCODE) {            if (!verifyPermissions(paramArrayOfInt)) {                showMissingPermissionDialog();                isNeedCheck = false;            }        }    }
1 0
原创粉丝点击