如何从 android 10 中的位图中获取 uri
how to get uri from bitmap in android 10
我在 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();
}
}
}
首先你必须更新你的 sdk 才能使用 MediaStore.MediaColumns.RELATIVE_PATH
compileSdkVersion 29
targetSdkVersion 29
将此 2 sdk 版本设置为 29,以便您可以使用 RELATIVE_PATH
,然后在尝试此操作后
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);
您可以参考@PerracoLabs 的完整 。
我在 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();
}
}
}
首先你必须更新你的 sdk 才能使用 MediaStore.MediaColumns.RELATIVE_PATH
compileSdkVersion 29
targetSdkVersion 29
将此 2 sdk 版本设置为 29,以便您可以使用 RELATIVE_PATH
,然后在尝试此操作后
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);
您可以参考@PerracoLabs 的完整