2012-05-22 73 views
18

Tengo imágenes, que se leen desde sdcard solo por una aplicación particular, así que quiero ocultarlo de la galería de imágenes. He puesto el archivo .nomedia en él, pero este archivo se ignora, las imágenes aún se muestran en la Galería. Lo puse con "." al principio. Sigue sin funcionar. ¿Algunas ideas?Android - .nomedia no funciona para las imágenes

+4

No sé si esto realmente funcionaría (ya que no sé si Android investiga los datos o simplemente en la extensión de archivo) pero ha intentado cambiar la extensión del archivo a algo que es completamente su ¿propio? Como sabes cuáles son los archivos, puedes cargarlos tú mismo, pero Android podría pasarlos por alto. –

+0

@ Dr.Dredel +1, simplemente eliminar la extensión debería funcionar bien. – 66CLSjY

+0

¿Puedes publicar tu código para crear el archivo .nomedia para que podamos verificar que sea correcto? De lo contrario, usar la recomendación del Dr. Dredel debería funcionar. De lo contrario, diría que mira esta otra respuesta http://stackoverflow.com/questions/2733576/android-file-creation-fails y asegúrate de tener el permiso correcto. – Brayden

Respuesta

5

Bueno ... Admito que solo estoy adivinando, pero dado que obtuvo un +1 en el comentario, le daré un giro como respuesta. Como esta es su propia aplicación, cambie la extensión del archivo de imagen a algo totalmente único ".myimagefile" por ejemplo, y vea si eso lo oculta de Android. Mientras tanto, sabes qué archivos cargar en tu propia aplicación y cómo guardarlos.

+2

'MediaScanner' usa extensiones de archivo para determinar el tipo de archivo, por lo que cambiar el nombre de cada archivo funcionaría, pero el cambio de nombre del directorio (después de agregar' .nomedia') es mucho más simple. –

+0

como dije, estaba siguiendo lo que el OP describió como su problema y adivinando cuál podría ser la posible solución. Parece que .nomedia no es una solución perfecta, yendo por la otra respuesta, pero puedo ver cómo hacer un esquema de cambio de nombre de archivo podría ser una molestia. –

0

Puede considerar usar la biblioteca Zip de expansión de APK (requiere un nivel de API 5 o superior) para leer los archivos que tendrá instalados en la tarjeta SD como parte de un archivo Zip. Una descripción de esta biblioteca se puede encontrar aquí:

http://developer.android.com/guide/market/expansion-files.html#ZipLib

Presumiblemente, los archivos almacenados en un archivo ZIP en su tarjeta SD no se mostrará por la Galería.

Además, si tiene imágenes que su aplicación lee de (pero no escritura a) la tarjeta SD, y que sólo deberían estar disponibles para su aplicación, y que podrían ser entregados cuando su aplicación está instalada o actualizada, entonces podría tener sentido aprovechar una nueva instalación de Google Play para incorporarla como parte de su aplicación cuando esté instalada.

Supongo que está almacenando sus imágenes en la tarjeta SD porque son demasiado grandes para caber en su archivo APK (dado su límite de tamaño de 50MB, que es incluso más pequeño que en la práctica para ciertos dispositivos, debido a problemas de almacenamiento en búfer).

Si es así, puede considerar que Google Play, a partir del 3/5/2012, admite el archivo adjunto (para su aplicación) de hasta dos "archivos de expansión" de hasta 2 Gigabytes cada uno. El APK todavía tiene un máximo de 50 MB, pero los archivos de expansión aumentan el almacenamiento total disponible a más de 4 GB. Esos archivos de expansión son servidos por Google, y se mantienen en una carpeta de tarjeta SD específica para su aplicación, y se puede acceder mediante una API proporcionada por la Biblioteca de descarga (requiere API de nivel 5 o superior).

Aquí es anuncio de este cambio de Google:

http://android-developers.blogspot.in/2012/03/android-apps-break-50mb-barrier.html

Y aquí es una descripción detallada de la instalación:

http://developer.android.com/guide/market/expansion-files.html

Nota que si bien esta instalación es nuevo, las bibliotecas se han suministrado con el SDK de Android para usar con niveles anteriores de API. Por ejemplo, en mi instalación, creo que las versiones de API-8 aquí:

<Android SDK base folder>\extras\google\play_apk_expansion\ 

Esa misma carpeta incluye la biblioteca antes mencionada expansión postal APK en su subcarpeta zip_file.

No he usado personalmente esta instalación todavía, y así lo estoy describiendo únicamente en base a las referencias citadas.

17

Supongo que estás usando Android 4.0, ya que .nomedia funcionó correctamente hasta entonces.El AOSP bug report for the issue explica:

MediaScanner en Android 4.0 falla olvidar archivos indexados ya-cuando encuentra un archivo .nomedia, pero hace honor que si está presente en la primera pasada. Entonces, la solución es simplemente cambiar el nombre del directorio. Por supuesto, puede cambiar el nombre después de la próxima exploración, si lo desea.

Actualización: Supongo que la solución completa sería forzar una exploración de medios después de cambiar el nombre del directorio. Yo no lo he probado, pero algo como esto debería hacer el truco:

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

Tenga en cuenta que el reinicio del teléfono también reindexa las imágenes [probado en Andro 4.1.2] –

+0

@GrzegorzDev cómo comprobar después de reiniciar? no funciona con ".nomedia" –

+0

Ver http://android.stackexchange.com/questions/51784/can-i-trigger-a-media-scan-via-the-command-line –

1

El archivo .nomedia es preventiva, no curativa (en Android 4.0), y es un error. Si tenía un archivo .nomedia y las imágenes ya están en él, la Galería seguirá buscando imágenes.

Debe crear su archivo .nomediaantes de poner imágenes en él.

Editar: todas las carpetas que comienzan con un punto no se escanean (porque están ocultas).

+0

"preventivo, no curativo" Esto solo es cierto en Ice Cream Sandwich - ver mi respuesta. –

4

Aquí hay algo que me encontré:

http://www.transformerforums.com/forum/asus-transformer-faq/17765-solved-nomedia-doesnt-work-under-honeycomb-ics.html

Sin embargo, una pequeña alteración a ese método:

  1. Descargar e instalar SDRescan aplicación
  2. Borrar datos de aplicación Galería
  3. Borrar datos para la aplicación Media Storage
  4. Abrir la aplicación SDRescan descargada desde el paso 1

SDCard debe volver a analizarse y todos los directorios que contengan archivos .nomedia se deben ignorar en este punto.

+0

Esto es lo que funcionó para mí. Es sencillo. En mi caso, no podría haber cambiado el nombre de la carpeta porque eran las imágenes de Whatsapp y los videos de Whatsapp otras carpetas de medios de Whatsapp que no deseaba mostrar en la Galería. Cambiar el nombre de la carpeta probablemente haría que la aplicación de WhatsApp también pierda los datos. Por eso, este método es el mejor y más seguro. – finitenessofinfinity

5

El error .nomedia es correcto y PUEDE agregarlo a una carpeta de imágenes preexistente.

Puede obligar a la galería a volver a indexar después de crear el archivo .nomedia cambiando el nombre de la carpeta, ejecute la galería (la "carpeta oculta no debería estar ahora" y cambie el nombre de la carpeta a la que desea. permanecer oculto.

sólo lo hice de nuevo para asegurarse de que funciona en mi teléfono. Android 4.0.4.

1

en mi tarjeta de memoria tengo miles de fotos que superan los medios de comunicación-escáner. a continuación, en la carpeta raíz en mi tarjeta de memoria, renombrado de "RootFolder" a ".RootFolder"

Conviértete en el directorio oculto y no usar más .nomedia

Pruebe esto.

1

Con Media Storage 4.1.1 en mi Samsung Galaxy Note 2, ninguno de los trucos anteriores funciona completamente, en este sentido: los directorios que contienen archivos .nomedia todavía se escanean, lo que puede agotar la batería (aunque el resultado se ignora en la galería), y también directorios con nombres que comienzan con un '."Todavía son escaneados :-(
recurrí a través de la aplicación 'Media escáner Raíz', que permite desactivar el escáner medios de mierda por completo. Esto se logra mediante parecer algo así como

pm disable com.android.providers.media/com.android.providers.media.MediaScannerReceiver

Por cierto, la desactivación/congelación de los Medios de Comunicación La aplicación de almacenamiento en sí tiene el mal efecto de que la selección y el encuadernado de tonos de llamada y notificaciones ya no funciona (qué maravilloso diseño), pero cuando solo se desactiva su componente de escáner, todavía se puede usar, por ejemplo, ES File Explorer para seleccionar tonos

0

La galería no se actualiza con tanta frecuencia y algunas miniaturas todavía están en la vista. Para esto, necesita reiniciar el teléfono o actualizar la galería mediante programación, siguiendo el código.

/** 
* This method is must to reflect changes on gallery, if some file is 
* deleted or moved, <b> no updation is shown on gallery till phone is 
* rebooted </b> or <i>till this method UpdateGallery(Activity activity) is 
* called</i> UpdateGallery 
*/ 
public static void UpdateGallery(Activity activity) { 
    activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri 
      .parse("file://" + Environment.getExternalStorageDirectory()))); 
} 
Cuestiones relacionadas