如何从android 10中的位图获取uri

问题描述 投票:0回答:2

[我在android 10中获取URI时遇到问题,它在较低的设备上运行,但是我不知道在android 10中如何操作。我正在服务器中上传视频。

 bitmap = Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, false);
    String path = MediaStore.Images.Media.insertImage(mContext.getContentResolver(), bitmap, "Title", null);
    Uri.parse(path);

我也尝试ContentValues,但我不明白该怎么办,但遇到一些错误,例如无法解决Q,RELATIVE_PATH,IS_PENDING

 ContentValues contentValues = new ContentValues();
        contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, System.currentTimeMillis()+"");
        contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, relativeLocation);
            contentValues.put(MediaStore.MediaColumns.IS_PENDING, 1);
        }

任何人都可以帮助我如何在android 10中获取URI吗?

高度赞赏任何帮助。

android bitmap storage uri mediastore
2个回答
0
投票

Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;


0
投票

使用下一个片段将新的位图插入Andorid 10中的MediaStore中,并获取Uri。考虑到此代码仅适用于Android 10。

压缩格式必须与mime-type参数有关。例如,对于JPEG压缩格式,mime类型将为“ image / jpeg”,依此类推。subFolder参数是可选的。

@NonNull
private Uri saveBitmap(@NonNull final Context context, @NonNull final Bitmap bitmap,
                        @NonNull final Bitmap.CompressFormat format, @NonNull final String mimeType,
                        @NonNull final String displayName, @Nullable final String subFolder) throws IOException
{
    String relativeLocation = Environment.DIRECTORY_PICTURES;

    if (!TextUtils.isEmpty(subFolder))
    {
        relativeLocation += File.separator + subFolder;
    }

    final ContentValues  contentValues = new ContentValues();
    contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, displayName);
    contentValues.put(MediaStore.MediaColumns.MIME_TYPE, mimeType);
    contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, relativeLocation);

    final ContentResolver resolver = context.getContentResolver();

    OutputStream stream = null;
    Uri uri = null;

    try
    {
        final Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        uri = resolver.insert(contentUri, contentValues);

        if (uri == null)
        {
            throw new IOException("Failed to create new MediaStore record.");
        }

        stream = resolver.openOutputStream(uri);

        if (stream == null)
        {
            throw new IOException("Failed to get output stream.");
        }

        if (bitmap.compress(format, 95, stream) == false)
        {
            throw new IOException("Failed to save bitmap.");
        }

        return uri;
    }
    catch (IOException e)
    {
        if (uri != null)
        {
            // Don't leave an orphan entry in the MediaStore
            resolver.delete(uri, null, null);
        }

        throw e;
    }
    finally
    {
        if (stream != null)
        {
            stream.close();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.