Meine aktuelle Android-Anwendung muss anrufen
ActivityManager.clearApplicationUserData()
um das Löschen des App-Speichers durch den Benutzer zu simulieren
Welches funktioniert gut.
Ein Nebeneffekt des Anrufens clearApplicationUserData()
ist, dass die App (verständlicherweise) geschlossen ist.
Das gibt eine schlechte Benutzererfahrung.
Ich habe Schwierigkeiten, meine Anwendung neu zu starten, sobald ich angerufen habe clearApplicationUserData()
.
Ich habe versucht startActivity
, Alarm Manager
mit Pending Intent
, Foreground
/Background
Service.
Nichts funktioniert.
Ist es unmöglich, eine aufgerufene Android-App neu zu starten clearApplicationUserData()
?
android
android-intent
Tyrannisieren
quelle
quelle
clearApplicationUserData()
?" - Ich bezweifle, dass dies in Ihrer eigenen App möglich ist. Zeigen Sie dem Benutzer eine Nachricht an, in der erläutert wird, dass dies vor dem Aufrufen dieser Methode geschehen wird, und der Benutzer kann die App über den Starter neu starten.clearApplicationUserData
ist dies der gewünschte Ablauf. Sie können den Quellcode dafür auschecken .MainActivity
. Wenn dies überhaupt möglich ist, wird es dringend empfohlen! Wenn nicht, vielleicht so etwas wie das Planen einer Aufgabe mitWorkManager
(die nicht (?) Von klaren App-Daten beeinflusst wird), um Ihre Aktivität zu starten?Antworten:
(1. Antwort : Diese Antwort funktioniert nur in begrenzten Situationen. Es ist keine vollständige Antwort.)
public boolean clearApplicationUserData ()
Beschreibung
Rückgabe :
true
Wenn die Anwendung erfolgreich das Löschen der Daten der Anwendung angefordert hat;false
Andernfalls.Wie auf der Referenzwebsite angegeben, haben wir einen Rückkehrer, bevor die Bewerbung geschlossen wird. Also werden wir diesen Rückkehrer verwenden, um die App neu zu starten.
wenn Aktivität
onDestroy()
undonStop()
werden App neu starten genannt.Wir setzen Neustartaktion in beide
onDestroy()
undonStop()
um sicher App wieder neu gestartet werden zu lassen.Außerdem halte ich es für eine gute Idee, die Stoppaktivität zu erzwingen, bevor das Betriebssystem sie stoppt.
es ist, weil es sicherstellt, dass
onDestroy()
undonStop()
aufgerufen wird.quelle
ActivityManager.clearApplicationUserData()
der App-Prozess gewaltsam beendet. Es wird keine andere Codezeile ausgeführt.Mein Vorschlag mag trivial klingen, aber haben Sie in Betracht gezogen, nicht anzurufen?
ActivityManager.clearApplicationUserData()
?Hier ist, was die Dokumentation über diese Methode sagt:
Um dieses Verhalten nachzuahmen, müssen Sie nur Ihre internen und externen Speicherverzeichnisse löschen. Für den Zugriff auf diese sind keine Berechtigungen erforderlich.
quelle
( 2. Antwort : Ich brauche viel mehr Beitrag dazu)
Nach 8 Stunden Recherche in Android OS und Android Developers Website, um eine Lösung zu finden, um die Aktivität beim
clearApplicationUserData
Aufrufen neu zu starten . Endlich würde ich eine finden können netten / Hacking finden können Lösung finden.Diese Lösung sieht aus wie Zidane Dribble :)
Lassen Sie uns die Lösung vorstellen. zunächst
clearApplicationUserData
löscht alle Hinweise der Anwendung , wenn wie aufgerufen wird , Aufgaben, Benachrichtigungen, Alarme usw. daher ausdrücklich Aktivität Berufung ist nicht möglich .Der implizite Weg ist der einzig mögliche Weg, um Aktivitäten aufzurufen.
Nach ein paar Tests stellte ich fest, dass die
manifest
registrierte Anwendungintent-filters
nicht entfernt werden konnte und sie auf eingehende Systemübertragungen warten können .Ungefähr 98% der Systemübertragungen würden nicht von einer freigegebenen Anwendung empfangen, und die verbleibenden 2% werden möglicherweise nicht sehr bald ausgestrahlt.
Also, was tun? Hmmm ? Komm schon Mann, ich muss eine Lösung finden ...
Bingo, ich muss etwas auslösen, um es vom System zu senden <= sieht hackend aus :)
Also entscheide ich mich für WIFI_STATE_CHANGED, weil
manifest.xml
MainActivity.java
Demo
Denken Sie daran, es ist nur ein Produkt mit minimaler Lebensfähigkeit, das weiterentwickelt werden muss, damit es perfekt funktioniert.
quelle
Viel Spaß beim Codieren.
quelle
Durch Löschen der App-Daten auf dem Gerät über die API wird
clearApplicationUserData()
die App zurückgesetzt, als wäre sie gerade installiert worden. Wie Sie festgestellt haben, werden auch alle mit Ihrer App registrierten Alarme und Sendungen gelöscht. Der effizienteste Weg, um Ihre App im Vordergrund zu halten, besteht darin, die Daten selbst zu löschen, wie andere betont haben, anstatt die API zu verwenden. Hier ist ein Beispiel: https://stackoverflow.com/a/9073473/949224jedoch , wenn Sie die API sind, bestimmt zu verwenden (die alle Daten tun garantiert werden gelöscht) und die App ist kraft gestoppt, habe ich einen Vorschlag:
Erstellen Sie eine kleine Begleit-App, die unmittelbar vor dem Löschen Ihrer App-Daten gestartet werden kann. Die Companion-App startet Ihre App einfach neu, möglicherweise nach einer kurzen Zeitüberschreitung.
Die Begleit-App selbst muss anschließend geschlossen werden und sollte idealerweise vor dem Aktivitätsstapel usw. verborgen sein.
Ich habe gesehen, dass dies mit Android 6.0 funktioniert, aber es gibt keine Garantie dafür, dass es vielseitig ist und auf ganzer Linie funktioniert. Es wäre mehr zu tun, um die Companion-App auf Wunsch UI-frei zu machen und vor dem Launcher des Telefons versteckt zu werden. Wahrscheinlich möchten Sie das APK auch als Datei in Ihrer eigenen App bündeln und beim ersten Start installieren. Dazu muss der Benutzer die Installation aus "Unbekannten Quellen" (Nicht-Play-Store) aktivieren. Dies kann bei Bedarf durch Absichten für die richtigen Systemeinstellungen erfolgen, aber Benutzer benötigen eine gute Erklärung, warum dies erforderlich ist.
Wie ich bereits sagte, besteht der einfachere Ansatz darin, die Daten- und App-Berechtigungen selbst zu löschen.
quelle