Android10以上通過onActivityResult獲取圖片

 

昨天本人使用'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;
}

 

 

我是天堂,祝你一分鐘解決問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章