Generalidades

Almacenamiento de rango en Android: escritura y eliminación de archivos multimedia | Autor: Vishrut Goyani | Octubre de 2021

Al escribir archivos en Android 10, es posible que haya considerado utilizar métodos tradicionales y Solicitar LegacyExternalStorage La bandera en el manifiesto de la aplicación. Sin embargo, cuando desarrolla aplicaciones para Android 11 (o usa targetSdkVersion 30), este no es el caso, porque Google acaba de declarar que eliminará la bandera en el futuro, y esto es solo una solución temporal.

Una cosa más a tener en cuenta es android.permission.WRITE_EXTERNAL_STORAGE No funcionará incluso si lo ha declarado Solicitar LegacyExternalStorage Márquelo en la lista porque la aplicación no puede escribir directamente en otros directorios de aplicaciones, ni puede modificar el contenido de otros directorios de aplicaciones según los cambios de almacenamiento de alcance en Android 11.

La aplicación aún puede escribir archivos en sus directorios relacionados, como imágenes de imágenes, DCIM de documentos y otros archivos multimedia y películas de videos. Hay otras formas de resolver este problema, pero ahora discutiremos la escritura de imágenes en DCIM, porque esta es probablemente una de las preguntas más frecuentes allí. Esta es una imagen para entenderla mejor.

1*2mt5W7qF4dT8oMKro3OQfA

Si desea escribir imágenes en el directorio DCIM, no es necesario que cree la carpeta usted mismo como con el método tradicional Archivo.mkdirs () U otros métodos similares. Solo necesita pasar la ruta del archivo y el mapa de bits al almacenamiento de medios, si no existe, ¡creará automáticamente el directorio!

Así es como lo haces:

public static Uri saveBitmap(Context context,
Bitmap bitmap,
Bitmap.CompressFormat compressFormat,
String mime_type,
String display_name,
String path)
OutputStream openOutputStream;
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, display_name);
contentValues.put(MediaStore.Images.ImageColumns.MIME_TYPE, mime_type);
contentValues.put(MediaStore.Images.ImageColumns.RELATIVE_PATH, path);
ContentResolver contentResolver = context.getContentResolver();
Uri insert = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
if (insert != null)
try
openOutputStream = contentResolver.openOutputStream(insert);
if (openOutputStream == null)
throw new IOException("Failed to open output stream.");
else if (bitmap.compress(compressFormat, 90, openOutputStream))
openOutputStream.close();
return insert;
else
throw new IOException("Failed to save bitmap.");

catch (IOException unused)
contentResolver.delete(insert, null, null);
return insert;
catch (Throwable th)
th.addSuppressed(th);


return null;

Aquí puede cambiar algunos atributos según sea necesario, como el formato de compresión, el tipo MIME, el nombre para mostrar (lo mismo para otros medios). La implementación de este método es la siguiente:

String path = pathtoyourDirinDCIM; //It's the path where you want to save your image or mediaUri uri = DisplayUtils.saveBitmap(context,
bitmap,
Bitmap.CompressFormat.JPEG,
"image/jpeg",
"IMG100.jpg",
path);
Log.d(TAG, "saved image uri: " + uri);

¡Eso es todo! ¡Ha guardado correctamente la imagen en la ubicación deseada sin sudar!

Ahora echemos un vistazo a cómo eliminar imágenes en dispositivos Android 10 y superiores.

LEER  Android con diez años de estilo

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba