una subir studio seleccionar ruta imagen guardar galeria desde como cargar java android media image

java - subir - save image in sqlite android



Dónde guardar imágenes en Android? (5)

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

Guárdelos en una tarjeta SD en una carpeta pública

  • Utiliza espacio que no se liberará en la desinstalación
  • El usuario puede ver fotos en la Galería
  • Necesita una carpeta en la raíz de la tarjeta SD (en realidad puede verla mientras navega por su teléfono)

Guárdelos en la tarjeta SD en una carpeta no pública

  • Utiliza espacio que no se liberará en la desinstalación
  • Secretamente usa espacio en la tarjeta SD

Guárdelos 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 ninguna parte?


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

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

Actualización: Pero; Si desea almacenar en caché solo los datos, hay un administrador de caché definido en webkit. CacheManager

No usé el paquete antes, pero los métodos parecen ser sencillos 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 usar 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 transmisión ''ACTION_DEVICE_STORAGE_LOW'' y ''ACTION_DEVICE_STORAGE_OK''. Luego sabrá cuándo su aplicación ocupa demasiado espacio de acuerdo con el dispositivo y cuándo debe comenzar a eliminar las imágenes. El tamaño de su aplicación seguirá creciendo, pero podrá administrar el crecimiento y la contracción.


Solo un consejo: si los guarda en la tarjeta SD, serán escaneados por MediaScanner y aparecerán en la Galería de los usuarios (Fotos), que probablemente no desee. Por lo tanto, es probable que desee almacenarlos en el teléfono o decirle a MediaScanner que no los escanee (aparentemente imposible después de una búsqueda rápida en Google).
Probablemente sea mejor almacenar unos pocos seleccionados en el directorio privado de su aplicación, que se eliminarán cuando la aplicación se desinstale.


Tu 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 eliminarlo de este directorio si el dispositivo se está quedando sin espacio.

Sin embargo, tenga en cuenta que los documentos dicen:

no debe confiar en que el sistema borre estos archivos por usted; siempre debe tener un máximo razonable, como 1 MB, por la cantidad de espacio que consume con los archivos de caché, y podar esos archivos cuando excede ese espacio

Si necesita mucho espacio y prefiere usar la tarjeta SD, puede llamar

getExternalCacheDir()

en lugar. Estos también se eliminarán 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 el espacio es bajo. Si usa esta opción, también debe verificar que el almacenamiento externo esté disponible con

Environment.getExternalStorageState()

antes de intentar escribirle