ver ven todas tarjeta reconoce que puedo muestra movil mis memoria las imagenes galeria fotos estan desde como archivos aparecen android image save gallery

android - ven - no puedo ver las fotos de la tarjeta sd en el movil



La imagen, guardada en una tarjeta SD, no aparece en la aplicación Galería de Android (15)

Úselo después de guardar la imagen

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

Guardo una imagen en la tarjeta SD y no aparece en la aplicación Galería hasta que retire la tarjeta sd y la devuelva.

¿Tienes alguna idea de por qué es así?

Parece que la aplicación Galería tiene algo de caché que no se actualiza en el archivo guardar ...

En realidad, también quiero abrir la imagen que acaba de guardar en la aplicación Galería y no tener éxito con eso
this es mi pregunta sobre este tema.


Actualización de la galería incluyendo Android KITKAT

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); File f = new File("file://"+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)); Uri contentUri = Uri.fromFile(f); mediaScanIntent.setData(contentUri); this.sendBroadcast(mediaScanIntent); } else { sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); }


Aquí está el código para MediaScannerConnection:

MyMediaConnectorClient client = new MyMediaConnectorClient(newfile); MediaScannerConnection scanner = new MediaScannerConnection(context, client); client.setScanner(scanner); scanner.connect();

newfile es el objeto de archivo de su archivo nuevo / guardado.


Aquí estoy compartiendo un código que puede cargar imágenes en forma de mapa de bits y guardar esa imagen en la galería de tarjetas SD en la carpeta del nombre de la aplicación. Debes seguir estos pasos

  1. Descargar Image Bitmap primero

private Bitmap loadBitmap(String url) { try { InputStream in = new java.net.URL(url).openStream(); return BitmapFactory.decodeStream(in); } catch (Exception e) { e.printStackTrace(); } return null; }

  1. Proporcione también el siguiente permiso en su archivo AndroidManifest.xml.

uses-permission android:name="android.permission.INTERNET" uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"

  1. Aquí está todo el código escrito en Activty en el que queremos realizar esta tarea.

void saveMyImage(String appName, String imageUrl, String imageName) { Bitmap bmImg = loadBitmap(imageUrl); File filename; try { String path1 = android.os.Environment.getExternalStorageDirectory() .toString(); File file = new File(path1 + "/" + appName); if (!file.exists()) file.mkdirs(); filename = new File(file.getAbsolutePath() + "/" + imageName + ".jpg"); FileOutputStream out = new FileOutputStream(filename); bmImg.compress(Bitmap.CompressFormat.JPEG, 90, out); out.flush(); out.close(); ContentValues image = new ContentValues(); image.put(Images.Media.TITLE, appName); image.put(Images.Media.DISPLAY_NAME, imageName); image.put(Images.Media.DESCRIPTION, "App Image"); image.put(Images.Media.DATE_ADDED, System.currentTimeMillis()); image.put(Images.Media.MIME_TYPE, "image/jpg"); image.put(Images.Media.ORIENTATION, 0); File parent = filename.getParentFile(); image.put(Images.ImageColumns.BUCKET_ID, parent.toString() .toLowerCase().hashCode()); image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName() .toLowerCase()); image.put(Images.Media.SIZE, filename.length()); image.put(Images.Media.DATA, filename.getAbsolutePath()); Uri result = getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image); Toast.makeText(getApplicationContext(), "File is Saved in " + filename, Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); } }

  1. Espero que pueda resolver todo tu problema.

Debes otorgar permisos a la aplicación Galería. Simplemente presione el icono de la aplicación de la galería en la pantalla de inicio y toque ''INFORMACIÓN DE LA APLICACIÓN'' que aparece en la parte superior de la pantalla. Al hacerlo, se mostrará la configuración de la aplicación de la galería. Ahora vaya a la pestaña Permisos y active el almacenamiento, los permisos de la cámara al alternarlos. Ahora ve a la aplicación de galería original y obtendrás las imágenes guardadas.


Deje que su actividad implemente ''MediaScannerConnectionClient'' y agregue esto a su actividad:

private void startScan() { if(conn!=null) conn.disconnect(); conn = new MediaScannerConnection(YourActivity.this,YourActivity.this); conn.connect(); } @Override public void onMediaScannerConnected() { try{ conn.scanFile(yourImagePath, "image/*"); } catch (java.lang.IllegalStateException e){ } } @Override public void onScanCompleted(String path, Uri uri) { conn.disconnect(); }


Mi código para MyMediaConnectorClient:

clase pública MyMediaConnectorClient implementa MediaScannerConnectionClient {

String _fisier; MediaScannerConnection MEDIA_SCANNER_CONNECTION; public MyMediaConnectorClient(String nume) { _fisier = nume; } public void setScanner(MediaScannerConnection msc){ MEDIA_SCANNER_CONNECTION = msc; } @Override public void onMediaScannerConnected() { MEDIA_SCANNER_CONNECTION.scanFile(_fisier, null); } @Override public void onScanCompleted(String path, Uri uri) { if(path.equals(_fisier)) MEDIA_SCANNER_CONNECTION.disconnect(); }

}


Mi respuesta a la pregunta original y a cualquier otra persona que pueda tener este problema:

Estaba teniendo el mismo problema, las imágenes de mi aplicación indicaban que las personas guardadas en la tarjeta SD no aparecían en su Galería de inmediato. Después de buscar, encontré esta línea de código insertada después de mi código ''save to sdcard'' que solucionó el problema:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));


También puede agregar una Imagen a la Galería de Medios por intención, eche un vistazo al código de ejemplo para ver cómo se hace:

ContentValues image = new ContentValues(); image.put(Images.Media.TITLE, imageTitle); image.put(Images.Media.DISPLAY_NAME, imageDisplayName); image.put(Images.Media.DESCRIPTION, imageDescription); image.put(Images.Media.DATE_ADDED, dateTaken); image.put(Images.Media.DATE_TAKEN, dateTaken); image.put(Images.Media.DATE_MODIFIED, dateTaken); image.put(Images.Media.MIME_TYPE, "image/png"); image.put(Images.Media.ORIENTATION, 0); File parent = imageFile.getParentFile(); String path = parent.toString().toLowerCase(); String name = parent.getName().toLowerCase(); image.put(Images.ImageColumns.BUCKET_ID, path.hashCode()); image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, name); image.put(Images.Media.SIZE, imageFile.length()); image.put(Images.Media.DATA, imageFile.getAbsolutePath()); Uri result = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);


Una solución más simple es usar el método de conveniencia estático scanFile() :

File imageFile = ... MediaScannerConnection.scanFile(this, new String[] { imageFile.getPath() }, new String[] { "image/jpeg" }, null);

donde this es su actividad (o cualquier contexto), el tipo mime solo es necesario si está utilizando extensiones de archivo no estándar y el null es para la devolución de llamada opcional (que no necesitamos para un caso tan simple).


este trabajo conmigo

File file = ..... // Save file context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));


hay una aplicación en el emulador que dice: ''Herramientas Dev''

haga clic en eso y seleccione ''Escaneo de medios'' ... todas las imágenes serán escaneadas



File folderGIF = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/newgif2"); //path where gif will be stored success = folderGIF.mkdir(); //make directory String finalPath = folderGIF + "/test1.gif"; //path of file ..... /* changes in gallery app if any changes in done*/ MediaScannerConnection.scanFile(this, new String[]{finalPath}, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } });


sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

No parece funcionar en KITKAT. Lanza la excepción de denegación de permiso y bloquea la aplicación. Así que para esto, he hecho lo siguiente,

String path = mediaStorageDir.getPath() + File.separator + "IMG_Some_name.jpg"; CameraActivity.this.sendBroadcast(new Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri .parse("file://" + path)));

Espero eso ayude.