最近写项目碰到一个比较烦人的事情,修改前人版本,他在清单文件里设置了  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 permissionsNeeded = new ArrayList();

        final List permissionsList = new ArrayList();
        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 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);
        }
    }


代码不多,就没用代码片



更多相关文章

  1. soot实现Android(安卓)Apps插桩(一)
  2. OS版本不同造成的一些问题
  3. Android(安卓)集成海康威视监控 SDK,实现监控录像的查看
  4. android 代码优化(2)
  5. 为什么Android要采用Binder作为IPC机制?
  6. 说说 Android(安卓)中如何操作音频与视频文件
  7. phonegap推送实现(android)
  8. 关于更新Android(安卓)sdk之后出现This Android(安卓)SDK requir
  9. 服务器基于PHP CodeIgniter,Android基于Volley实现多文件/图片上

随机推荐

  1. Android获取CPU架构
  2. Android 循环读取名字相似的图片
  3. Android解析json数据
  4. Android之判断当前网络状态
  5. 填坑
  6. android折叠展开自定义列表项测试
  7. 图片布局在android中资源文件夹中添加一
  8. Android 配置输出Apk名称和路径、渠道
  9. android:设置密码隐藏与显示
  10. android创建数据库和表