Frage

Meine Anwendung verwendet eine ganze Reihe von Bildern, die aus dem Internet und im Cache lokal auf dem Android-Handy heruntergeladen werden. Ich frage mich, was der richtige Weg ist, diese Bilder zu speichern. Es gibt mehrere Möglichkeiten, wie ich sehen, die nicht vollständig befriedigend sind.

Speichern Sie sie auf SD-Karte in einem öffentlichen Ordner

  • Verwendet Speicherplatz, der wird nicht bei der Deinstallation befreit werden
  • Der Benutzer kann Bilder in der Galerie sehen
  • einen Ordner auf der SD-Karte Root benötigt (man kann es tatsächlich sehen, während das Telefon gerade)

Speichern Sie sie auf SD-Karte in einem nicht öffentlichen Ordnern

  • Verwendet Speicherplatz, der wird nicht bei der Deinstallation befreit werden
  • Heimlich verwendet Speicherplatz auf der SD-Karte

Speichern Sie sie innerhalb der Anwendung

  • sprengt Anwendung Größe viel zu viel

Was ist der richtige Weg, der lokal die Bilder meiner Anwendung Speicher nicht den Benutzer ablenken und keinen Müll überall verlassen?

War es hilfreich?

Lösung

Ihre beste Lösung ist die Verwendung:

context.getCacheDir()

Dieses Verzeichnis der Anwendung ist privat und wird bei der Deinstallation gelöscht werden, weiterhin das System für Sie aus diesem Verzeichnis löschen kann, wenn das Gerät wenig Platz ausgeführt wird.

Beachten Sie aber, dass die docs sagen:

  

Sie sollten sich nicht auf das System verlassen   Löschen Sie diese Dateien für Sie; Sie   sollte immer eine angemessene haben   maximal, wie 1 MB, für den Betrag   Platz Sie mit Cache-Dateien verbrauchen,   und diese Dateien beschneiden bei Überschreitung   dass der Raum

Wenn Sie viel Platz benötigen und eher die SD-Karte verwenden würden, können Sie anrufen

getExternalCacheDir()

statt. Diese werden auch bei der Deinstallation entfernt, aber das System überwacht nicht den verfügbaren Platz in externen Speichern, so werden nicht automatisch diese Dateien, wenn nur wenig freien Speicherplatz löschen. Wenn Sie diese Option verwenden, sollten Sie auch prüfen, ob externe Speicher verfügbar

Environment.getExternalStorageState()

, bevor Sie versuchen, um es zu schreiben.

Andere Tipps

Sie können Bilder aus dem MediaScanner verbergen, wenn Sie es ausdrückte in ein versteckt ich (dh mit einem Punkt voran) wie /sdcard/.donotscan/.

Update: Wie romainguy dies auf Twitter erwähnt funktioniert auch, wenn Sie eine Datei setzen genannt .nomedia in die Richt.

Ich denke, der beste Weg ist, um die Datenbank zu verwenden.

  1. Es bläst nicht die Anwendung und Speicher.
  2. Die zugehörige Datenbank gelöscht wird, sobald die Anwendung deinstalliert wird.
  3. Niemand kann dies erreichen Dateien neben Ihrer Anwendung.

Update: Aber; Wenn Sie nur die Daten zwischenspeichern möchten, gibt es einen Cache-Manager in webkit definiert. Cachemanager

Ich habe, um das Paket nicht vor, sondern die Methoden scheinen gerade nach vorne zu verwenden:

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

und Sie können die Nutzung unter Google Gears Code

finden

Ich hoffe, das hilft.

Wenn Sie Sie wollen nicht den Cachemanager verwenden, um eine Datenbank verwenden oder eine lokale (nicht-SD) Datei (lokale Dateien auf einer vollständigen Deinstallation gelöscht werden) und registrieren Sie den ‚ACTION_DEVICE_STORAGE_LOW‘ zu empfangen und ‚ACTION_DEVICE_STORAGE_OK‘ Broadcast Aktionen. Dann wissen Sie, wenn Ihre Anwendung ist zu viel Platz auf der Vorrichtung nach Aufnahme und wenn Sie Bilder beginnen müssen gelöscht werden. Ihre Anwendung Größe wird noch wachsen, aber Sie werden das Wachstum und Schrumpfung verwalten können.

Nur ein Tipp - wenn man sich auf der SD-Karte speichert, werden sie von dem MediaScanner gescannt und in dem Benutzer Galerie (Fotos) erscheinen, die Sie wahrscheinlich nicht wollen. So möchten Sie sie wahrscheinlich auf dem Handy speichern, oder irgendwie sagen MediaScanner nicht, sie zu scannen (scheinbar unmöglich nach einer schnellen Google-Suche.)
Wahrscheinlich am besten speichern ein paar Auserwählte in Ihrer Anwendung privates Verzeichnis, das entfernt werden, wenn die Anwendung deinstalliert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top