android - 如何从android 10中的位图获取uri
问题描述
我在 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
import android.provider.MediaStore;
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?
任何帮助都会受到高度赞赏。
解决方案
在 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();
}
}
}
推荐阅读
- web-scraping - Instagram 数据抓取/抓取
- html - 有没有办法在重复转换之前添加“冷却”延迟或要求用户输入?
- php - Ruby toLengthValue 函数转换为 PHP
- java - Java:equals 和 hashCode 方法契约
- uwp-xaml - UWP XAML:无法将 GridView 项目拉伸到全宽
- laravel - laravel + bootstrap 4.1:导航栏 + 全高 div?
- javascript - 如何切换菜单打开/关闭?
- php - 在 zip 文件中读取多个 csv
- c# - 合并集合中的相似项目
- file-upload - sap.m.UploadCollection 拖放问题 sapui5 1.52.9