AndroidAndroid开发

Android 10.0以上创建文件失败,说找不到该文件

2021-07-15  本文已影响0人  你的益达233

问题场景:

如果你的app下的build.gradle设置了compileSdkVersion 30,且targetSdkVersion 30。你测试手机刚好是Android 11的。如果文件根目录还是Environment.getExternalStorageDirectory()就会创建失败。

log错误提示:

E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Starwberry/img/local_sendpic_temp.jpg: open failed: ENOENT (No such file or directory)

不用去看是否是读写权限问题,Android 11根本没有这目录了

解决方案:

方式一:把compileSdkVersion和targetSdkVersion降到29以下(我没测,理论上可以)

方式二:加版本判断获取根目录

public static String getSDPath(Context context) {
    File sdDir = null;
    boolean sdCardExist = Environment.getExternalStorageState().equals(
            Environment.MEDIA_MOUNTED);// 判断sd卡是否存在
    if (sdCardExist) {
        if (Build.VERSION.SDK_INT>=29){
            //Android10之后
            sdDir = context.getExternalFilesDir(null);
        }else {
            sdDir = Environment.getExternalStorageDirectory();// 获取SD卡根目录
        }
    } else {
        sdDir = Environment.getRootDirectory();// 获取跟目录
    }
    return sdDir.toString();
}
上一篇 下一篇

猜你喜欢

热点阅读