使用android 10手机开发的时候,比如拍照或者选择相册图片的时候会获取失败

文本转自 链接

网上查了一下说在AndroidManifest.xml 文件的application中添加这样一行代码就好了

1
android:requestLegacyExternalStorage="true"

但我试了一下还是不行,后来通过打印图片的路径才发现问题所在,正常的路径一般都是这样的

1
/storage/emulated/0/paisamore/1603769512132.png

但使用android 10手机测试的时候发现路径是这样的

1
content://media/external/file/175256

也就是说他前面是content开头的,我们通过
BitmapFactory.decodeFile(path)
是加载不成功的。

android10读取相册返回以content开头的路径也不是绝对的,我们也可以让他返回那种正常的路径,这样就可以使用BitmapFactory.decodeFile(path)了。但如果我们使用的是第三方库,在android 10他返回的就是以content开头的文件路径,我们只有自己处理了,处理方式如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static Bitmap getBitmapFromPath(Context contex, String path) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
return getBitmapFromUri(contex, Uri.parse(path));
} else {
return BitmapFactory.decodeFile(path);
}
}

// 通过uri加载图片
public static Bitmap getBitmapFromUri(Context context, Uri uri) {
try {
ParcelFileDescriptor parcelFileDescriptor =
context.getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
parcelFileDescriptor.close();
return image;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}