todos stickers sticker samsung que porque ponen pasa paquetes movil mes los las imagenes galería galeria fotos eliminar copian como borro borrar java android

java - stickers - porque lo sticker de messenger se ponen en mi galeria



Eliminar imagen en miniatura de la galería cuando se ocultó (1)

. antes de la carpeta solo hazlo invisible. Pero hay una manera de decir que no use esta carpeta en absoluto para la galería. Por favor, intente colocar un archivo vacío llamado ".nomedia" en su carpeta.

esta pregunta se ha formulado anteriormente (no específicamente de esta manera) pero aún no ha habido una respuesta exclusiva. Así que estamos tratando de encontrar la mejor solución aquí. Estoy desarrollando una aplicación y en mi aplicación myPic un directorio llamado myPic moviendo sus archivos a un directorio llamado .myPic . Cuando oculto mis fotos, las miniaturas todavía están en la galería. Encuentro 3 soluciones a esto:

primera solución:

usando ACTION_MEDIA_MOUNTED transmisión de esta manera:

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

El problema con este código es que toma recursos de abrazo y lo más importante es que está bloqueado desde Android 4.4 . así que usar este método no es racional para agregar 10 imágenes a la galería. por lo que no es un método Todo exclusivo. el uso de ACTION_MEDIA_SCANNER_SCAN_FILE tampoco funciona en Android 4.4 tampoco

segunda solución:

utilizando MediaScannerConnection . así que creé un bucle for y pasé la dirección antigua de cada archivo que oculto. esta es mi función MediaScannerConnection :

private void scanFile(File file) { // Tell the media scanner about the new file so that it is // immediately available to the user. MediaScannerConnection.scanFile(this,new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); }

Lo que pasa con MediaScannerConnection es que solo tiene efecto si el archivo existe. así que digamos que tengo una imagen llamada 1.jpg en el directorio myPic . usando esta clase puedo agregar 1.jpg a mi galería inmediatamente, pero cuando muevo 1.jpg al directorio .myPic y escaneo la ruta anterior de 1.jpg no pasa nada. logcat dice que este archivo no exsit. así que MediaScannerConnection solo agrega archivos a la galería. ¿Qué pasa si paso la nueva ruta de 1.jpg a MediaScannerConnection ? Bueno, agrega 1.jpg del directorio .myPic a la galería y eso no es exactamente lo que quiero. así que de nuevo no es un método Todo Exclusivo

tercera solución:

utilizando getContentResolver() . por lo tanto, para eliminar miniaturas, este método puede ser la solución definitiva. Así que escribo el código de golpe. en cada bucle recupero la ruta de la imagen y la paso a getContentResolver().delete(Uri.parse(path),null,null) . Aquí está el código:

File myPic = new File(Environment.getExternalStorageDirectory()+"/myPic"); File myPicHide = new File(Environment.getExternalStorageDirectory()+"/.myPic"); if (!(myPicHide.exists()) & !(myPicHide.isDirectory())) { myPicHide.mkdirs(); }; if (myPic.isDirectory()) { String[] childeren = myPic.list(); if (childeren.length > 0) { for (int i = 0; i < childeren.length; i++) { String fileName = childeren[i]; File from = new File(Environment.getExternalStorageDirectory()+"/myPic"+fileName); File to = new File(Environment.getExternalStorageDirectory()+"/.myPic"+fileName); from.renameTo(to); try { String path = from.toString(); getContentResolver().delete(Uri.parse(path),null,null); } catch(Exception e) { Log.d("Rename", "Error happened"); } } } } else { Toast.makeText(getApplicationContext(), "myPic directory not found", Toast.LENGTH_LONG).show(); }

pero tampoco está funcionando y las miniaturas de mis archivos todavía se muestran en la cocina. ¿Estoy usando getContentResolver() de forma incorrecta? Este podría ser el método exclusivo para la situación en la que las miniaturas de archivos eliminados se muestran en la galería. Tengo la ruta de mis archivos y solo necesito eliminarla del proveedor de contenido del almacén de medios.

actualización: así resulta que usar Uri.parse(path) en la tercera solución es incorrecto. imagen Uri se inicia con el content:// y puede ser recuperado por MediaScannerConnection . así que creé un Uri llamado imageInGalleryUri y le imageInGalleryUri valor null . Usando mi función scanFile , cambié su valor de vez en cuando y le getContentResolver() el valor a getContentResolver() . Aquí está el código:

boolean whereIsMediaState = true; Uri imageInGalleryUri = null; File myPic = new File(Environment.getExternalStorageDirectory()+"/myPic"); File myPicHide = new File(Environment.getExternalStorageDirectory()+"/.myPic"); if (!(myPicHide.exists()) & !(myPicHide.isDirectory())) { myPicHide.mkdirs(); }; if (myPic.isDirectory()) { String[] childeren = myPic.list(); if (childeren.length > 0) { for (int i = 0; i < childeren.length; i++) { String fileName = childeren[i]; File from = new File(Environment.getExternalStorageDirectory()+"/myPic"+fileName); scanFile(from); File to = new File(Environment.getExternalStorageDirectory()+"/.myPic"+fileName); from.renameTo(to); if (to.isFile()){ try { getContentResolver().delete(imageInGalleryUri,null,null);} catch(Exception e) { Log.d("Rename", "Error happened"); } } } } else { Toast.makeText(getApplicationContext(), "myPic directory not found", Toast.LENGTH_LONG).show(); } private void scanFile(File file) { // Tell the media scanner about the new file so that it is // immediately available to the user. MediaScannerConnection.scanFile(this,new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); imageInGalleryUri = uri; } }); }

Probé el código pero solo detecta la primera imagen y la borro de la galería, pero no afecta a las otras imágenes. No puedo entender por qué. ¿alguna idea?

De forma anticipada, muchas gracias por su ayuda