1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Automatische Deaktivierung/Deinstallation einer App

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von sem_thesis, 18.05.2011.

  1. sem_thesis, 18.05.2011 #1
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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.
     
  2. Areafo, 18.05.2011 #2
    Areafo

    Areafo Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    1
    Registriert seit:
    18.05.2011
  3. sem_thesis, 18.05.2011 #3
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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.
     
  4. Areafo, 18.05.2011 #4
    Areafo

    Areafo Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    1
    Registriert seit:
    18.05.2011
    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).
     
  5. sem_thesis, 18.05.2011 #5
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Also muss ich nur den folgenden Code in mein AndroidManifest.xml-File einfügen?
    Was soll denn in der UninstallerActivity stehen?
     
  6. Areafo, 18.05.2011 #6
    Areafo

    Areafo Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    1
    Registriert seit:
    18.05.2011
    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.
     
  7. sem_thesis, 18.05.2011 #7
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One

    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?
     
  8. Areafo, 18.05.2011 #8
    Areafo

    Areafo Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    1
    Registriert seit:
    18.05.2011
    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: 18.05.2011
  9. sem_thesis, 18.05.2011 #9
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Achso. Ja - verstanden.

    Mit dem PendintIntent & AlarmManager geht's also nicht?
    Was gibt's sonst für Methoden um einen Delay hineinzubringen?
     
  10. Areafo, 18.05.2011 #10
    Areafo

    Areafo Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    1
    Registriert seit:
    18.05.2011
    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: 18.05.2011
  11. sem_thesis, 18.05.2011 #11
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Ok - ich habe den oben-stehenden Code benutzt mit einem 20s Timer.

    Nach 20s habe ich die Meldung bekommen:



    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.
     
  12. sem_thesis, 19.05.2011 #12
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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>
    
     
  13. ko5tik, 19.05.2011 #13
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    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 )
     
  14. ramdroid, 19.05.2011 #14
    ramdroid

    ramdroid Android-Experte

    Beiträge:
    644
    Erhaltene Danke:
    89
    Registriert seit:
    20.10.2010
    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...
     
  15. sem_thesis, 20.05.2011 #15
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    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!
     

Diese Seite empfehlen