昨天本人使用'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'獲取圖片地址,通過打印path,發現地址不完整
//隔離存儲沙盒
AndroidManifest中Application下
1、android:requestLegacyExternalStorage="true"
通過判斷版本獲取真實圖片地址
2、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;
}
3、最後上傳圖片是一個file文件,轉換後拿到了file
//bitmap轉換file
public static File getFile(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
File file = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");
try {
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
InputStream is = new ByteArrayInputStream(baos.toByteArray());
int x = 0;
byte[] b = new byte[1024 * 100];
while ((x = is.read(b)) != -1) {
fos.write(b, 0, x);
}
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
return file;
}
我是天堂,祝你一分鐘解決問題。