# Leichen löschen



## AquaBall (23. Mai 2012)

Meine App schreibt Daten in einen Ordner.

Wie kann ich diese Daten/Ordner wieder löschen wenn die App nicht mehr existiert, und ich aber keinen Explorer/Rootrecht habe?

Ich meine also nicht aus dem Programm heraus, (das hab ich schon programmiert.).
Sondern: wenn die App deinstalliert wird, und dann noch Dateileichen im Datenordner übrigbleiben.

Oder: kann ich sicherstellen, dass bei App-Deinstallation dieses Löschen automatisch aufgerufen wird?


----------



## Tomate_Salat (23. Mai 2012)

Afaik werden beim löschen alle, der App zugeordnete, Ordner gelöscht. [STRIKE]Wenn du z.B. auf die SDK etwas abgelegt hast, dann sind diese davon natürlich ausgeschlossen. Wenn die Daten nur für deine App interessant sind (und eine deinstallation nicht überleben sollen), dann solltest du den internal storage verwenden.[/STRIKE]



> You can save files directly on the device's internal storage. By default, files saved to the internal storage are private to your application and other applications cannot access them (nor can the user). When the user uninstalls your application, these files are removed.



[EDIT]Quatsch, auch externe Ressourcen können aufgeräumt werden. Lese dir einfach mal Data Storage | Android Developers durch[/EDIT]


----------



## AquaBall (23. Mai 2012)

Mann, die Dinger machen ja wesentlich mehr als man vermutet.

Danke für den Hinweis!


----------



## AquaBall (26. Mai 2012)

Mein Programm hat Schreibberechtigung:
In einem eigens definierten Ordner "myBibliothek" 
werden Subordner mit freiem Namen angelegt
und dort XML-Dateien gespeichert.



Tomate_Salat hat gesagt.:


> Afaik werden beim löschen alle, der App zugeordnete, Ordner gelöscht.



Ich hab das nun mal getestet:
1) Zuerst hab ich versucht über "Einstellungen/Appsverwalten" die Daten der App zu löschen. Da hat er zwar 4kb irgendwo freigegeben, aber alle Ordner und Dateien, die mein Programm geschrieben hatte, waren dann immer noch da. (Meine App hat sie alle noch gefunden.)

2) Dann hab ich die App deinstalliert, in der Hoffnung, dass dann alles bereingit wird, aber das ist anscheinend ein Irrtum. Alle Daten waren immer noch da.  (Meine App hat sie nach Wiederinstallation, auch wieder alle gefunden.)


Jetzt hab ich zwar auf meinenm Handy root+Explorer, da kann ich also aufräumen, aber auf einem andere Testhandy hab ich keine entsprechenden Hilfsmittel.
Außerdem ist auch mein AVD schon etwas "vermüllt".
Und zusätzlich sind in der EntwicklungsPhase ein paar fehlerhafte Dateien (z.b. irrtümlich ohne Extension xml) entstanden, die ich auch über meine eigenes Programm nicht mehr "erkenne"

Wie bring ich dese Fehler, (und überhaupt all meine Daten bei Deinstallation) wieder weg?


----------



## schlingel (26. Mai 2012)

Es gibt meines Wissens noch keine Möglichkeit einen OnUninstall-Event mitzubekommen. SO sieht das ähnlich.

Was du aber tun kannst: In deinem App-Root-Verzeichnis ein File ablegen in dem eine eindeutige ID steht. Diese ID erzeugst du beim ersten App-Start wenn du den Ordner erzeugst und legst sie eben in diesem File sowie in deinen App-Settings im Internal Storage ab.

Beim Start übreprüfst du dann drei Dinge:
1. Hast du eine ID in deinen Settings abgelegt?
2. Gibt es dein app_id File?
3. Stimmen die ID aus dem app_id File und deinen Settings überein?

Wenn nur eine von den drei Fragen nicht mit JA beantwortet wurde, räumst du mal generell auf und machst einen "Neustart".

Damit kannst du zwar nicht sicherstellen, dass die Daten auf der SD-Karte nach einer Deinstallation übrig bleiben, allerdings kannst du damit sehr wohl sicherstellen, dass deine App nie mit veralteten Daten arbeitet.


----------



## AquaBall (27. Mai 2012)

Danke für den Tipp.
Und ein meine existierenden Leichen komm ich aber nie ran?
(weil ich ja nichtmal den korrekten Namen weiß)

Eine App-Zuordnung so wie Tomate es meint gibts also nicht?


----------



## Tomate_Salat (27. Mai 2012)

Kommt drauf an, wo du diese ablegst. Nicht alle Ordner des external Storage werden gelöscht (was ja auch so erstmal gut ist). Wie in meinem geposteten Link zur developer-site, werden wohl nur Daten des external Storage gelöscht, die in diesem Ordner sind:

[c]/Android/data/<package_name>/files/[/c]

Aber prinzipiell gilt: Wenn der Benutzer die SD-Karte wechselt oder beim deinstallieren nicht im Gerät hat, dann bleiben diese Daten erhalten. 

(Ich glaube nicht, dass Android diese daten nach dem einlegen der SD-Karte in das Gerät entfernt)


----------

