android系统读取sd卡权限奇葩问题

android6.0读取sd卡文件问题

if (Build.VERSION.SDK_INT >= 23) {
       if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
         ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
      }
   }

在小米系统6.0,可以正常读取(小米5.0,华为5.0,和其他手机我测试过几台,都可以正常读取,显示图片)
唯独华为荣耀7的6.0,读取图片失败,说没有权限。

爆出异常:Unable to decode stream: java.io.FileNotFoundException: /storage/143B-DA69/DCIM/Camera/IMG_20160321_125830.jpg: open failed: EACCES (Permission denied)


代码简单,直接读取sd卡上面的图片,显示在imageView上面
(为了方便,我直接写死一个图片路径,图片是存在的)
 Bitmap bitmap = compressImage("/storage/143B-DA69/DCIM/Camera/IMG_20160321_125830.jpg");
        if (bitmap==null){
          VLog.showToast(this,"is null");
        }else {
            img.setImageBitmap(bitmap);
        }



//文件转bitmap
    public static Bitmap compressImage(String path) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        Bitmap bitmap = BitmapFactory.decodeFile(path, options); // 此时返回 bm 为空
        options.inJustDecodeBounds = false; // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
        int be = (int) (options.outHeight / (float) 640);
        if (be <= 0)
            be = 1;
        options.inSampleSize = be; // 重新读入图片,注意此时已经把 options.inJustDecodeBounds
        // 设回 false 了
        bitmap = BitmapFactory.decodeFile(path, options);
        return bitmap;
    }

添加权限(我项目的权限,有些网络请求的权限我就不删除,直接拷贝过来)
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />



找了好久原因,一开始以为我代码有问题,发现,在其他手机可以,唯独我荣耀7的6.0,运行出错。

然后我在各大应用市场,下载一下小应用(做到粗糙的app,感觉没有做什么适配的那些app)试了一试,发现,他们读取sd卡的可以,也可以读取图片。

太奇怪了。

找了一个晚上,早上我改了一下  targetSdkVersion 23 改为   targetSdkVersion 22
然后运行,发现可以了,没有爆出没有权限的错误,基本所有手机都可以。


下面是荣耀7的6.0系统出现权限问题的配置(targetSdkVersion 改为22可以成功运行)

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "interest.pictest23"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 

猜你喜欢

转载自blog.csdn.net/feelsyt/article/details/85316448