Tengo una aplicación con una galería de imágenes y quiero que el usuario pueda guardarla en su propia galería. He creado un menú de opciones con una sola voz "guardar" para permitir eso, pero el problema es ... ¿cómo puedo guardar la imagen en la galería?
este es mi código:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.menuFinale:
imgView.setDrawingCacheEnabled(true);
Bitmap bitmap = imgView.getDrawingCache();
File root = Environment.getExternalStorageDirectory();
File file = new File(root.getAbsolutePath()+"/DCIM/Camera/img.jpg");
try
{
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, ostream);
ostream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
no estoy seguro de esta parte del código:
File root = Environment.getExternalStorageDirectory();
File file = new File(root.getAbsolutePath()+"/DCIM/Camera/img.jpg");
¿Es correcto guardar en la galería? desafortunadamente el código no funciona :(
android
imageview
gallery
save-image
Christian Giupponi
fuente
fuente
Respuestas:
El código anterior agregará la imagen al final de la galería. Si desea modificar la fecha para que aparezca al principio o cualquier otro metadato, consulte el código a continuación (Cortesy of SK, samkirton ):
https://gist.github.com/samkirton/0242ba81d7ca00b475b9
fuente
.git
al final)De hecho, puedes guardar tu foto en cualquier lugar. Si quieres guardar en un espacio público, para que cualquier otra aplicación pueda acceder, usa este código:
La imagen no va al álbum. Para hacer esto, necesita llamar a un escaneo:
Puede encontrar más información en https://developer.android.com/training/camera/photobasics.html#TaskGallery
fuente
He intentado muchas cosas para que esto funcione en Marshmallow y Lollipop. Finalmente terminé moviendo la imagen guardada a la carpeta DCIM (la nueva aplicación Google Photo escanea imágenes solo si aparentemente están dentro de esta carpeta)
Y luego el código estándar para escanear archivos que también puede encontrar en el sitio de Google Developers .
Recuerde que esta carpeta no puede estar presente en todos los dispositivos del mundo y que, a partir de Marshmallow (API 23), debe solicitar el permiso para WRITE_EXTERNAL_STORAGE al usuario.
fuente
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
hizo el truco para mí. ¡Gracias!getExternalStoragePublicDirectory()
ahora está obsoleto en la API 29. Necesito usar MediaStoreSegún este curso , la forma correcta de hacerlo es:
Esto le dará la ruta raíz del directorio de la galería.
fuente
fuente
Puede crear un directorio dentro de la carpeta de la cámara y guardar la imagen. Después de eso, simplemente puede realizar su escaneo. Instantáneamente mostrará su imagen en la galería.
fuente
Vengo aquí con la misma duda, pero para Xamarin para Android, he usado la respuesta de Sigrist para hacer este método después de guardar mi archivo:
y resolvió mi problema, Thx Sigrist. Lo puse aquí porque no encontré una respuesta sobre esto para Xamarin y espero que pueda ayudar a otras personas.
fuente
En mi caso, las soluciones anteriores no funcionaron, tuve que hacer lo siguiente:
fuente
ContentProvider
preferible una soluciónEste código está en el método onCreate. Este código es para crear un directorio de app_name. Ahora, se puede acceder a este directorio usando la aplicación de administrador de archivos predeterminada en Android. Utilice esta cadena filePath siempre que sea necesario para configurar su carpeta de destino. Estoy seguro de que este método también funciona en Android 7 porque lo probé, por lo que también puede funcionar en otras versiones de Android.
fuente