Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Dónde guardar imágenes en Android?

Mi aplicación utiliza una gran cantidad de imágenes que se descargan de Internet y se almacenan en caché localmente en el teléfono Android. Me pregunto, ¿cuál es la manera correcta de guardar esas imágenes. Hay varias maneras que veo, que no son totalmente satisfactorias.

Guardarlos en la tarjeta SD en una carpeta pública

  • Utiliza espacio que no se liberará al desinstalar
  • El usuario puede ver fotos en Galería
  • Necesita una carpeta en la raíz de sdcard (puede verla mientras navega por su teléfono)

Guardarlos en la tarjeta SD en una carpeta no pública

  • Utiliza espacio que no se liberará al desinstalar
  • Utiliza secretamente espacio en la tarjeta SD

Guardarlos dentro de la aplicación

  • Aumenta demasiado el tamaño de la aplicación

¿Cuál es la forma correcta de guardar localmente las imágenes de mi aplicación para no distraer al usuario y no dejar basura en ningún lado?

  • Android.os.FileUriExposedException: file.jpg expuesto más allá de la aplicación a través de ClipData.Item.getUri ()
  • 5 Solutions collect form web for “¿Dónde guardar imágenes en Android?”

    Su mejor solución es usar:

    context.getCacheDir() 

    Este directorio es privado para la aplicación y se eliminará en la desinstalación, además el sistema puede eliminar de este directorio si el dispositivo no tiene espacio suficiente.

    Tenga en cuenta que los documentos dicen:

    Usted no debe confiar en el sistema que suprime estos archivos para usted; Siempre debe tener un máximo razonable, como 1 MB, por la cantidad de espacio que consume con archivos de caché y podar esos archivos al superar ese espacio

    Si necesita mucho espacio y prefiere utilizar la tarjeta SD que puede llamar

     getExternalCacheDir() 

    en lugar. Estos también se eliminan en la desinstalación, pero el sistema no supervisa el espacio disponible en el almacenamiento externo, por lo que no eliminará automáticamente estos archivos si hay poco espacio. Si utiliza esta opción también debe comprobar que el almacenamiento externo está disponible con

     Environment.getExternalStorageState() 

    Antes de intentar escribir en ella.

    Puede ocultar imágenes del MediaScanner si lo coloca en un directorio oculto (es decir, con un prefijo de punto) como /sdcard/.donotscan/ .

    Actualización: Como romainguy menciona en twitter esto también funciona si pones un archivo llamado .nomedia en el directorio.

    Creo que la mejor manera es usar la base de datos.

    1. No explotar la aplicación y la memoria.
    2. La base de datos relacionada se elimina una vez que se desinstale la aplicación.
    3. Nadie puede acceder a estos archivos además de su aplicación.

    Actualización: Pero; Si desea almacenar en caché sólo los datos, hay un gestor de caché definido en el webkit. CacheManager

    No he utilizado el paquete antes, pero los métodos parecen simples de usar:

     static boolean cacheDisabled() static boolean endCacheTransaction() static CacheManager.CacheResult getCacheFile(String url, Map<String, String> headers) static File getCacheFileBaseDir() static void saveCacheFile(String url, CacheManager.CacheResult cacheRet) static boolean startCacheTransaction() 

    Y puedes encontrar el uso en el código de Google Gears

    Espero que esto ayude.

    Si no desea utilizar CacheManager, utilice una base de datos o un archivo local (no SD) (los archivos locales se eliminan en una desinstalación completa) y regístrese para recibir las acciones de difusión "ACTION_DEVICE_STORAGE_LOW" y "ACTION_DEVICE_STORAGE_OK". A continuación, sabrá cuándo la aplicación está ocupando demasiado espacio de acuerdo con el dispositivo y cuándo debe iniciar la eliminación de imágenes. Su tamaño de aplicación seguirá creciendo, pero usted será capaz de manejar el crecimiento y la contracción.

    Sólo un consejo: si los guarda en la tarjeta SD, será escaneado por el MediaScanner y aparecerá en la Galería de usuarios (Fotos), que probablemente no desee. Así que probablemente desee almacenarlos en el teléfono, o de alguna manera decir MediaScanner no para escanearlos (aparentemente imposible después de una búsqueda rápida de Google.)
    Probablemente sea mejor almacenar unos pocos en el directorio privado de su aplicación, que se eliminarán cuando se desinstale la aplicación.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.