您的位置:首页 > 移动开发 > Android开发

Android 6.0 权限请求问题

2016-11-08 15:47 405 查看
         最近写项目碰到一个比较烦人的事情,修改前人版本,他在清单文件里设置了  android:targetSdkVersion="23" 很明显这个是Android 6.0的,  我自己的版本比这个低,在Android 6.0手机上更新安装版本时,出错,提示我的版本太低了,好吧,那就是android:targetSdkVersion="23"这个不能低于23了,所以只好修改自己的版本为23。那么问题来了,Android 6.0 权限只在清单文件里设置了还不行,还要在代码里再询问一次,这就很坑了,参照一些文件,跟一些博友的文章,自己搞了一下,写在这边跟大家分享一下,也自己留个档案

     首先,Android 6.0 才要判断是否要在代码里判断权限,所以通过下面的方法可以获取手机的版本号:

    if (Build.VERSION.SDK_INT >= 23) {

           check();

        } else {

        }

 ///////////////////////////////////////////////////////////////////////////////////////////////

// 再次判断权限的方法
    private void check() {

        List<String> permissionsNeeded = new ArrayList<
4000
String>();

        final List<String> permissionsList = new ArrayList<String>();

        if (!addPermission(permissionsList,

                Manifest.permission.ACCESS_COARSE_LOCATION))

            permissionsNeeded.add("位置");

        if (!addPermission(permissionsList,

                Manifest.permission.WRITE_EXTERNAL_STORAGE))

            permissionsNeeded.add("读写sd卡");

        if (!addPermission(permissionsList, Manifest.permission.CALL_PHONE))

            permissionsNeeded.add("电话");

        if (!addPermission(permissionsList, Manifest.permission.CAMERA)) {

            permissionsNeeded.add("相机");

        }

        if (!addPermission(permissionsList, Manifest.permission.READ_SMS)) {

            permissionsNeeded.add("短信");

        }

        if (permissionsList.size() > 0) {

            requestPermissions(

                    permissionsList.toArray(new String[permissionsList.size()]),

                    REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);

            return;

        }

    }

private boolean addPermission(List<String> permissionsList,

            String permission) {

        if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {

            permissionsList.add(permission);

            // Check for Rationale Option

            if (!shouldShowRequestPermissionRationale(permission))

                return false;

        }

        return true;

    }

   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 此外还要重写一个方法

    @Override

    public void onRequestPermissionsResult(int requestCode,

            String[] permissions, int[] grantResults) {

        switch (requestCode) {

        case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:

            if (grantResults != null && !grantResults.equals("")) {

                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // Permission Granted

                 //   check();

                } else {

                    // Permission Denied

                   // 这边是有没给的权限让他再弹一次,因为6.0 有些权限不给,会报错,甚至奔溃闪退

                    check();

                }

            }

            break;

        default:

            super.onRequestPermissionsResult(requestCode, permissions,

                    grantResults);

        }

    }

代码不多,就没用代码片
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: