问题描述:在Android 10中使用BitmapFactory.decodeFileDescriptor()方法时,可能会返回null。
解决方法:为了解决这个问题,可以使用以下代码示例中的方法来加载图像文件。
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore;
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class BitmapUtils {
public static Bitmap loadBitmap(Context context, Uri uri) throws IOException {
InputStream inputStream = null;
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentResolver resolver = context.getContentResolver();
inputStream = resolver.openInputStream(uri);
if (inputStream != null) {
return BitmapFactory.decodeStream(inputStream);
}
} else {
ParcelFileDescriptor parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r");
if (parcelFileDescriptor != null) {
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
return BitmapFactory.decodeFileDescriptor(fileDescriptor);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}
使用时,可以调用loadBitmap()方法,并传入相应的Context和Uri参数来加载图像文件。
注意事项:
);context.getUriForFile()
方法获取Uri;FileProvider.getUriForFile()
方法获取Uri。