33 votes

Où enregistrer les photos sur Android ?

Mon application utilise un grand nombre d'images qui sont téléchargées depuis Internet et mises en cache localement sur le téléphone Android. Je me demande quelle est la bonne façon de sauvegarder ces images. Il y a plusieurs façons que je vois, qui ne sont pas entièrement satisfaisantes.

Enregistrez-les sur la carte SD dans un dossier public

  • Utilise de l'espace qui ne sera pas libéré lors de la désinstallation
  • L'utilisateur peut voir les photos dans la Galerie
  • Nécessite un dossier sur la racine de la carte SD (vous pouvez le voir lorsque vous naviguez sur votre téléphone).

Enregistrez-les sur la carte SD dans un dossier non public.

  • Utilise de l'espace qui ne sera pas libéré lors de la désinstallation
  • Utilise secrètement de l'espace sur la carte SD

Les enregistrer dans l'application

  • La taille de l'application est beaucoup trop importante

Quelle est la bonne façon d'enregistrer localement les images de mon application pour ne pas distraire l'utilisateur et ne pas laisser de déchets n'importe où ?

31voto

Rupert Bates Points 1690

La meilleure solution est d'utiliser :

context.getCacheDir()

Ce répertoire est privé pour l'application et sera supprimé lors de la désinstallation. En outre, le système peut supprimer ce répertoire pour vous si l'appareil manque d'espace.

Notez cependant que la documentation dit :

y supprimer ces fichiers à votre place ; vous toujours avoir un nombre raisonnable de raisonnable, comme 1 Mo, pour la quantité d'espace d'espace que vous consommez avec les fichiers de cache, et élaguer ces fichiers lorsqu'ils dépassent cet espace

Si vous avez besoin de beaucoup d'espace et que vous préférez utiliser la carte SD, vous pouvez appeler

getExternalCacheDir()

à la place. Ces fichiers seront également supprimés lors de la désinstallation, mais le système ne surveille pas l'espace disponible dans le stockage externe et ne supprimera donc pas automatiquement ces fichiers si l'espace est insuffisant. Si vous utilisez cette option, vous devez également vérifier que l'espace de stockage externe est disponible à l'aide de la fonction

Environment.getExternalStorageState()

avant de tenter d'y écrire.

11voto

rndstr Points 589

Vous pouvez masquer des images du MediaScanner si vous le placer dans un répertoire caché (c'est-à-dire avec un point en préfixe), comme par exemple /sdcard/.donotscan/ .

Mise à jour : En tant que romainguy mentionne sur twitter Cela fonctionne également si vous mettez un fichier nommé .nomedia dans le dir.

6voto

Ömer Points 988

Je pense que la meilleure façon est d'utiliser la base de données.

  1. Il ne fait pas exploser l'application et la mémoire.
  2. La base de données correspondante est supprimée une fois l'application désinstallée.
  3. Personne ne peut accéder à ces fichiers en dehors de votre application.

Mise à jour : Mais si vous souhaitez mettre en cache uniquement les données, il existe un gestionnaire de cache défini dans webkit. Gestionnaire de cache

Je n'ai pas utilisé le paquet auparavant, mais les méthodes semblent simples à utiliser :

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()

et vous pouvez en trouver l'usage à l'adresse suivante Code Google Gears

J'espère que cela vous aidera.

0voto

Will Points 5662

Si vous ne souhaitez pas utiliser le CacheManager, utilisez une base de données ou un fichier local (non SD) (les fichiers locaux sont supprimés lors d'une désinstallation complète) et enregistrez-vous pour recevoir les actions de diffusion 'ACTION_DEVICE_STORAGE_LOW' et 'ACTION_DEVICE_STORAGE_OK'. Vous saurez alors quand votre application occupe trop d'espace en fonction de l'appareil et quand vous devrez commencer à supprimer des images. La taille de votre application continuera de croître, mais vous serez en mesure de gérer la croissance et la décroissance.

-1voto

Isaac Waller Points 9218

Juste un conseil : si vous les enregistrez sur la carte SD, elles seront scannées par le MediaScanner et apparaîtront dans la Galerie (Photos) de l'utilisateur, ce que vous ne souhaitez probablement pas. Il est donc préférable de les enregistrer sur le téléphone ou de demander au MediaScanner de ne pas les scanner (apparemment impossible après une rapide recherche sur Google).
Il est probablement préférable d'en stocker quelques-uns dans le répertoire privé de votre application, qui seront supprimés lorsque votre application sera désinstallée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X