P
pyretta
Ambitioniertes Mitglied
- 1
Hallo,
zunächst eine Kurzinfo des betreffenden Projekts:
Es ist ja so, dass wenn ich mit PhoneGap ein Bild mit der Kamera aufnehme, und in einem eigens für die App angelegten Ordner speichern möchte, dieses zunächst in einem temporären Verzeichnis abgelegt wird und dann eine Kopie des Bildes erstellt wird die dann in das Verzeichnis verschoben wird. Die verbliebene Kopie im temporären Verzeichnis verbleibt aber und schraubt unnötiger Weise den App Cache hoch.
Die Idee:
App Cache nach Beenden der App einfach leeren/löschen.
Die vermeindliche Lösung, die eigentlich funktionieren sollte, es aber nicht tut:
Der Ursprungscode hat leider alle Daten der App inklusive Datenbank und Shared Prefs gelöscht, ich habe es auf den Cache beschränken wollen.
Hier der Originalcode: android - Clear Application's Data Programatically - Stack Overflow
Ergebnis meines modifierzten Codes (siehe oben):
Laut LogCat wurde der Cache erfolgreich gelöscht. Aber wenn ich auf dem Smartphone (Samsung Galaxy S3) in "Einstellungen>Application Manager>Meine App>Cache" nachsehe, ist der Cache noch immer genau so voll wie zuvor und kein Byte wurde gelöscht.
Ergebnis des Originalcodes (Link siehe oben):
LogCat gibt mir aus, dass alle Verzeichnisse geleert wurden: Databases, Shared Prefs, Cache etc. Aber auch hier: Wenn ich auf dem Smartphone nachsehe, ist der Cache noch immer genau so voll wie zuvor. Einzig die wichtigen Daten, nämlich die Datenbank etc. wurden gelöscht, der Cache wurde nicht angerührt.
Jetzt hoffe ich auf eure Hilfe, denn irgendwie muss das doch gehn.
Habe auch einige andere Lösungsansätze ausprobiert, bisher leider auch ohne Erfolg.
Hier zwei Beispiele:
caching - Clear Application cache on exit in android - Stack Overflow
https://coderwall.com/p/aj79eg
Was ich auch gefunden habe, war ein PhoneGap Plugin (Teusink.org: PhoneGap Android CacheCleaner Plugin) das ich in dem Package "org.apache.cordova.plugins" als Klasse erstellen soll. Allerdings ist in dieser PhoneGap Version, die ich nutze, kein solches Package vorhanden. Wenn ich in meinem Projekt unter "Android Private Libraries>cordova-2.5.0.jar" nachsehe, sehe ich lediglich 3 Packages: org.apache.cordova, org.apache.cordova.api, org.apache.cordova.file. Also bin ich hier auch wieder ratlos.
Die Frage an Euch:
Hat jemand hier eine solche Problematik schon mal lösen können? Wenn ja, wie? Habt Ihr vielleicht Anregungen/Ideen was ich noch ausprobieren könnte? Oder habt Ihr Fehler entdeckt?
Ich wäre sehr dankbar für Eure Unterstützung.
Vielen Dank im Voraus.
zunächst eine Kurzinfo des betreffenden Projekts:
- Eclipse Juno Build id: 20130225-0426
- Android minSdk 8
- Android targetSdk 17
- PhoneGap 2.5
- jQuery mobile 1.3
- Datenbankzugriff mit PhoneGap (WebSQL)
- Kamerazugriff mit PhoneGap
Es ist ja so, dass wenn ich mit PhoneGap ein Bild mit der Kamera aufnehme, und in einem eigens für die App angelegten Ordner speichern möchte, dieses zunächst in einem temporären Verzeichnis abgelegt wird und dann eine Kopie des Bildes erstellt wird die dann in das Verzeichnis verschoben wird. Die verbliebene Kopie im temporären Verzeichnis verbleibt aber und schraubt unnötiger Weise den App Cache hoch.
Die Idee:
App Cache nach Beenden der App einfach leeren/löschen.
Die vermeindliche Lösung, die eigentlich funktionieren sollte, es aber nicht tut:
Code:
public class Startseite extends /*Activity*/ DroidGap {
private static Startseite instance;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
.....
.....
super.loadUrl("file:///android_asset/www/index.html", 5000);
}
@Override
public void onDestroy() {
super.onDestroy();
Startseite.getInstance().clearApplicationData();
System.out.println("onDestroy()");
}
public static Startseite getInstance() {
return instance;
}
public void clearApplicationData() {
File cache = getCacheDir();
File appDir = new File(cache.getParent());
if (appDir.exists()) {
String[] children = appDir.list();
for (String s : children) {
if (s.equals("cache")) {
deleteDir(new File(appDir, s));
Log.i("TAG", "** File /data/data/APP_PACKAGE/" + s + " DELETED **");
}
}
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
}
Hier der Originalcode: android - Clear Application's Data Programatically - Stack Overflow
Ergebnis meines modifierzten Codes (siehe oben):
Laut LogCat wurde der Cache erfolgreich gelöscht. Aber wenn ich auf dem Smartphone (Samsung Galaxy S3) in "Einstellungen>Application Manager>Meine App>Cache" nachsehe, ist der Cache noch immer genau so voll wie zuvor und kein Byte wurde gelöscht.
Ergebnis des Originalcodes (Link siehe oben):
LogCat gibt mir aus, dass alle Verzeichnisse geleert wurden: Databases, Shared Prefs, Cache etc. Aber auch hier: Wenn ich auf dem Smartphone nachsehe, ist der Cache noch immer genau so voll wie zuvor. Einzig die wichtigen Daten, nämlich die Datenbank etc. wurden gelöscht, der Cache wurde nicht angerührt.
Jetzt hoffe ich auf eure Hilfe, denn irgendwie muss das doch gehn.

Habe auch einige andere Lösungsansätze ausprobiert, bisher leider auch ohne Erfolg.
Hier zwei Beispiele:
caching - Clear Application cache on exit in android - Stack Overflow
https://coderwall.com/p/aj79eg
Was ich auch gefunden habe, war ein PhoneGap Plugin (Teusink.org: PhoneGap Android CacheCleaner Plugin) das ich in dem Package "org.apache.cordova.plugins" als Klasse erstellen soll. Allerdings ist in dieser PhoneGap Version, die ich nutze, kein solches Package vorhanden. Wenn ich in meinem Projekt unter "Android Private Libraries>cordova-2.5.0.jar" nachsehe, sehe ich lediglich 3 Packages: org.apache.cordova, org.apache.cordova.api, org.apache.cordova.file. Also bin ich hier auch wieder ratlos.

Die Frage an Euch:
Hat jemand hier eine solche Problematik schon mal lösen können? Wenn ja, wie? Habt Ihr vielleicht Anregungen/Ideen was ich noch ausprobieren könnte? Oder habt Ihr Fehler entdeckt?
Ich wäre sehr dankbar für Eure Unterstützung.
Vielen Dank im Voraus.