Automatische Deaktivierung/Deinstallation einer App

S

sem_thesis

Fortgeschrittenes Mitglied
0
Hallo


Ich bin gerade eine App am Schreiben.
Die App soll nach einer vorbestimmten Zeitdauer (etwa 2 Wochen) alle Daten aus der Phone-Datenbank löschen und sich selber deinstallieren.

Kann man so etwas mit einem Timer ermöglichen?
D.h. in the onCreate()-Methode wird der aktuelle Zeitpunkt currentTime notiert.
Am Zeitpunkt 14 Tage + currentTime wird die App gelöscht.


Ist so was möglich? Wenn ja - wie denn?


Freue mich auf Anregungen.
 
Auf diesem Link wird ein .apk File von der SD-Karte installiert.

Ich habe im Moment aber gar kein .apk File, sondern nur ein Eclipse Projekt?

Ich möchte, dass
a) mein Eclipse Projekt in .apk umgewandelt wird
b) der User die .apk Datei über Email erhält und auf dem Handy manuell installiert (ist das möglich?)
und erst danach
c) die .apk De-Installation automatisch verläuft.
 
Für den Uninstall ist es doch egal von wo aus es mal installiert wurde ^^.

Unbekannter Quelle muss aktiv sein wenn du die APK so verschickt installiert haben willst. Wie es aufs Handy kommt ob per Download aus Mail oder Push vom Rechner ist egal (kann mich da aber auch irren beim Download ist schon zu lange her das ich so eine App versucht habe zu deployen).
 
Also muss ich nur den folgenden Code in mein AndroidManifest.xml-File einfügen?
<activity android:name=".UninstallerActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.DELETE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="package" /> </intent-filter> </activity>

Was soll denn in der UninstallerActivity stehen?
 
Da muss nichts stehen. Es reicht wenn du die Action durch einen Intent auslöst.

Uri packageURI = Uri.parse("package:com.android.myapp");
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent)

Package Namen in der Uri.parse natürlich anpassen. Sonst gibts ne Exception.
 
Areafo schrieb:
Da muss nichts stehen.


Aber die Datei UninstallerActivity.java muss wenigstens existieren - oder nicht mal das??



Sagen wir ich habe eine Hauptklasse HelloUser.java.
Kann ich in dessen onCreate-Method() so etwas hinschreiben?

Code:
       int sleep = 5000; // Waiting time before Log-database is accessed
        Uri packageURI = Uri.parse("package:name_of_my_packet");
        Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
   
        
        PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0, uninstallIntent, 0);
        AlarmManager alarm = (AlarmManager) getBaseContext().getSystemService(Activity.ALARM_SERVICE);
        alarm.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + sleep, pi);
Gewünscht ist der Timer-Bomb-Effekt.
Nach 5 sekunden gibt es automatische Deinstallation.

Kann das funktionieren?
 
UninstallerActivity.java muss nicht existieren. Sehe es wie ein Shell Befehl der im Manifest verfügbar ist.


startActivity(uninstallIntent) nach gewünschter Zeit ausführen.

Du schickst praktisch den Delete Wunsch ins System wie eine Art Uninstall u darauf reagiert der Package Manager u haut die App aus dem System.
 
Zuletzt bearbeitet:
Areafo schrieb:
UninstallerActivity.java muss nicht existieren. Sehe es wie ein Shell Befehl der im Manifest verfügbar ist.
Achso. Ja - verstanden.

Areafo schrieb:
startActivity(uninstallIntent) nach gewünschter Zeit ausführen

Mit dem PendintIntent & AlarmManager geht's also nicht?
Was gibt's sonst für Methoden um einen Delay hineinzubringen?
 
Klar geht PendintIntent & AlarmManager in deiner Test oder Haupt Activity z.B.

Jetzt muss leider los ^^. Feierabend

Bekommste sicher hin ist ja jetzt nur noch start der Activity / Intent nach Zeit.
 
Zuletzt bearbeitet:
Ok - ich habe den oben-stehenden Code benutzt mit einem 20s Timer.

Nach 20s habe ich die Meldung bekommen:

Complete action using
- APK (name meiner applikation)
- package installer
(checkbox) use by default for this action



Nun finde ich das recht verwirrend für den Benutzer. Er weiss ja gar nicht um was für eine action es sich handelt?

Kann ich irgendwo noch einen Begleittext einfügen wie:
"Die Zeit dieser App ist abgelaufen. Die App wird sich nun selber terminieren.'

Wieso bekomme ich überhaupt die Option 'APK' ?? Die App hat ja nichts mit Deinstallierung zu tun, sondern nur der Package Installer.
Die Option 'APK' führt zu einem Crash.
 
Ich habe jetzt immer noch nichts dazu gefunden, wie man diesen PackageUninstaller Dialog userfriendly gestalten kann.


Deshalb habe ich mir eine andere Variante überlegt, und zwar:
1) Timer läuft sagen wir 20s
2) Danach kommt ein Dialogbox ("Warning: Applikation-laufzeit beendet")
3) Der Dialogbox enthält einen Button 'Kill'. Der Klick darauf launcht den PacketUninstaller und die App wird deinstalliert.


Jetzt die Frage - wie kann ich den PacketUninstaller per Klick starten?

Vorher ging der automatisch:

Code:
        <activity android:name=".UninstallerActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <action android:name="android.intent.action.DELETE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="package" />
            </intent-filter>
        </activity>
 
Meldung kommt davon, das du die Aktivity registriert hast, die auf den Intent reagiert
( Also, mehr wie eine -> Betriebsystem fragt den User der keine Agnung hat -> weg mit der Activuty aus dem eigenen Manofest )
 
Ich denke man keine ein automatisches Uninstall nur mit Root Zugriff ermöglichen. Ansonsten bekommt man immer den Uninstall-Dialog von Android zu Gesicht.

Andere Möglichkeit (ohne root) wäre eventuell dass du im Android source code nachschaust was beim uninstall passiert, und das bei dir direkt einbaust. Aber keine Ahnung ob das dann auch funktioniert, oder ob die entsprechenden APIs nur Systemapps zur Verfügung stehen...
 
Ich hab's jetzt mit Button-Klick gemacht. Der Klick ruft den Uninstall-Dialog von Android auf und weg ist die App.


Einfach und user-friendly.
Danke euch allen :)


PS: Einfach PM'en für den Sourcecode!
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
159
swa00
swa00
Laser5001
  • Laser5001
Antworten
2
Aufrufe
896
Laser5001
Laser5001
R
  • Robby1950
2
Antworten
23
Aufrufe
1.003
Robby1950
R
Zurück
Oben Unten