So starten Sie einen Dienst, wenn .apk zum ersten Mal installiert wird
Lesezeit: 8 Minuten
Lalit Poptani
In meiner Anwendung habe ich keinen UI-Teil, daher muss ich einen Dienst starten, sobald die Anwendung auf dem Gerät installiert wird. Ich habe viele Links gesehen, von denen die Antwort war, dass es nicht möglich ist, aber ich denke, es ist sicherlich möglich. Einfach mal anschauen Plan B Anwendung im Android Market, die meine Anforderung erfüllt. Unten ist meine Manifest-Datei, wie ich es versucht habe, aber der Dienst wurde überhaupt nicht aufgerufen. Lassen Sie mich also wissen, wie ein Dienst am besten gestartet werden kann, wenn die Anwendung installiert wird.
AKTUALISIEREN
Ich habe es auch mit versucht android.intent.action.PACKAGE_ADDED Es funktioniert gut, um das Paket für die anderen Anwendungen zu erkennen, aber nicht für sich selbst.
Vielleicht hilft Ihnen dieser Beitrag: stackoverflow.com/questions/2227604/…?
– Yahor10
16. Dezember 2011 um 9:12 Uhr
@Lalit: Untersuchen Sie, was mit einer PUSH-Installation einer Anwendung aus dem Market passiert und was sie tun kann. Irgendetwas löst den Start von Plan B aus – er startet nicht automatisch. Ich habe es gerade installiert und frage mich, ob die Installation etwas an ihre Server gesendet hat, die dann eine E-Mail an mein Gerät gesendet haben. EIN BroadcastReceiver Das Abhören eingehender E-Mails von einer bestimmten E-Mail-Adresse könnte verwendet werden, um a zu starten Service. Danach verstehe ich nicht genug darüber, wie PUSH-Installationen aus dem Market funktionieren oder wie sie ohne Benutzereingaben installiert werden, sodass ich nicht weiter helfen kann.
– Squonke
16. Dezember 2011 um 10:11 Uhr
@Lalit: Hallo, hast du eine Möglichkeit gefunden, den Dienst zu starten, wenn apk zum ersten Mal installiert wird?
– Mehul Joisar
6. März 2013 um 7:26 Uhr
Nein, es ist ohne einen UI-Teil in der Anwendung nicht möglich.
– Lalit Poptani
6. März 2013 um 7:27 Uhr
Vielen Dank für die schnelle Antwort. Ich habe noch einen Zweifel. Ist es also möglich, eine Anwendung ohne ein App-Symbol zu erstellen? Das bedeutet, dass die Anwendung nur aus Rundfunkempfängern und -diensten besteht.
– Mehul Joisar
6. März 2013 um 7:33 Uhr
CommonsWare
Glücklicherweise funktioniert Plan B nicht auf Android 3.1+, wie auf einem XOOM und einem Galaxy Nexus getestet.
Was Plan B tut, ist eine Sicherheitslücke auszunutzen, die von Drive-by-Malware ausgenutzt werden könnte, weshalb Android genau das verhindert.
AKTUALISIEREN
Zur Verdeutlichung: Wie inazaruk gepostet und ich andere Antworten kommentiert habe, werden alle Anwendungen bei der Installation in einen “gestoppten” Zustand versetzt. Dies ist derselbe Zustand, in den die Anwendung gelangt, nachdem der Benutzer das Stoppen der App über die Anwendung „Einstellungen“ erzwungen hat. In diesem “angehaltenen” Zustand wird die Anwendung aus keinem Grund ausgeführt, außer durch einen manuellen Start einer Aktivität. Vor allem nein BroadcastReceviers werden unabhängig von der Veranstaltung, für die sie sich registriert haben, aufgerufen, bis der Benutzer die App manuell ausführt.
Dieser Block behandelt das Plan B-Szenario der Remote-Installation und -Ausführung, das sie zuvor genutzt haben. Denn damit würde jeder mit einem gehackten Google-Konto Gefahr laufen, sein Gerät zu infizieren, sozusagen freihändig.
Also, wenn das OP sagt:
Ich muss einen Dienst starten, sobald die Anwendung auf dem Gerät installiert wird
Das OP ist erfolglos und muss die Anwendung neu gestalten, um diese angebliche “Notwendigkeit” zu vermeiden.
„Insbesondere werden keine BroadcastReceviers aufgerufen, unabhängig von dem Ereignis, für das sie sich registriert haben, bis der Benutzer die App manuell ausführt“ oder die Hardwareaktion ausgeführt wird. Dies kann das Starten der Kamera oder einen Neustart beinhalten (wie der Autor auch in stackoverflow.com/a/2127179/461982 erwähnt). Beachten Sie, dass Ihre App dadurch leicht als Malware bei Google Play gekennzeichnet werden kann.
– Verlassener Einkaufswagen
21. Juni 2019 um 16:56 Uhr
Jeffrey Blattmann
Anwendungen, die auf der /system-Partition installiert sind, werden nach der Installation nicht in den Zustand „gestoppt“ versetzt. Wenn Sie root haben, können Sie Folgendes tun:
Und es kann Broadcast-Intents sofort empfangen. Dies ist sicherlich keine Allzwecklösung, aber ich wollte es der Vollständigkeit halber erwähnen.
BEARBEITEN: Denken Sie daran, dass verschiedene Versionen von Android System-APKs an verschiedenen Orten finden. Android 8 legt sie beispielsweise unter /system/app//.apk ab. Shell in dein Gerät und stöbere herum und folge dem gleichen Schema, das für andere System-APKs verwendet wird.
,Wenn er dies tut, kann er die Apps nicht aktualisieren ,,, jedes Mal muss er dasselbe Verfahren durchführen ….
– Vipin Sahu
15. Mai 2012 um 12:57 Uhr
Wie ich bereits erwähnt habe, ist dies keine Allzwecklösung.
– Jeffrey Blattmann
15. Mai 2012 um 20:22 Uhr
Natürlich wird er in der Lage sein, eine System-App zu aktualisieren. Solange Sie denselben Paketnamen und dieselbe Signatur haben, können Sie eine System-App aktualisieren. Das Update wird auf der Datenpartition platziert, hat aber immer noch den Status „System“, da eine frühere Version auf der Systempartition verfügbar ist.
– Olle
21. September 2012 um 10:39 Uhr
@JeffreyBlattman Ja, ich stimme deinen Punkten zu. Ich habe den Kommentar von Vipin kommentiert. Ich widersprach seiner Aussage, dass jedes Update über die adb-Befehle erfolgen müsse. Mein Punkt war, dass sie nur einmal gemacht werden müssen. Sobald sich die apk in /system/app befindet, kann die normale App-Installation/-Aktualisierung verwendet werden.
– Olle
27. September 2012 um 18:05 Uhr
Ich hatte meine App mit dem Plattformzertifikat signiert, aber “normal” mit adb installiert. Erst als ich die apk nach /system/app gepusht habe, startete der Dienst von selbst. Diese Antwort war sehr hilfreich.
– Josh Feldmann
13. September 2016 um 16:07 Uhr
inazaruk
Ich stimme der Antwort von CommonsWare auf die Frage zu: So starten Sie den Android-Dienst bei der Installation. Mit anderen Worten, Sie können Ihren Dienst nicht automatisch starten, nachdem Sie gerade installiert wurden.
Noch etwas zu neueren Android-Plattformen: Wenn Sie überhaupt keine Benutzeroberfläche haben, werden Sie Probleme haben, Ihren Dienst zu starten, selbst wenn Sie ihn verwenden BOOT_COMPLETE Absicht auf Android 3.1+.
Das liegt daran, dass sich alle installierten Anwendungen im angehaltenen Zustand befinden. In diesem Status erhalten Anwendungen KEINE Broadcast-Benachrichtigungen.
Um Ihre Anwendung zu aktivieren, muss eine andere Anwendung (oder ein anderer Benutzer) Ihren Dienst oder Ihre Aktivität oder Ihren Inhaltsanbieter starten. Der übliche Arbeitsablauf ist, wenn der Benutzer auf das Symbol Ihrer Anwendung klickt.
Ich habe eine ausführliche Erklärung dazu in meinem geschrieben Blogeintrag.
Sie haben einen Link zum falschen Blog-Beitrag angegeben, der richtige ist Anwendungen „aktivieren“.. Prost 🙂
– Alexander Malachow
12. August 2013 um 3:54 Uhr
Links nicht gefunden @ inazaruk, Alexander Malakhov
– Ajay Pandaya
2. November 2015 um 5:47 Uhr
@inazaruk : Hast du einen neuen Link für deinen Blogbeitrag?
Plan B führt diesen Start durch, indem er auf die Ereignisse lauscht, die im System passieren. Es verwendet einen Empfänger, der buchstäblich Hunderte von Ereignissen abhört, in der Hoffnung, dass einige von ihnen schließlich ausgelöst werden. So können Sie es also tun. Andernfalls gibt es keine integrierte Möglichkeit, die Anwendung zu starten, sobald sie installiert ist.
Ich bin mir nicht sicher, was Ihre Einschränkungen / Ihr Zweck sind, aber wenn Sie eine andere Anwendung installieren können, die eine Aktivität hat, können Sie sie eine Absicht mit dem Flag senden lassen FLAG_INCLUDE_STOPPED_PACKAGES.
Dadurch wird Ihre Anwendung für die Absichtsauflösung verwendet, obwohl sie sich im angehaltenen Zustand befindet. Wenn die Aktion der Absicht mit einem Ihrer Filter übereinstimmt, wird das Paket auch aus dem angehaltenen Zustand geholt.
Parth Doshi
Ich glaube nicht. Sie können den Dienst sofort starten, nachdem Sie Ihre Anwendung auf dem Gerät installiert haben.
Die Anwendung muss zuerst vom Benutzer über eine Art aufgerufen werden Activity.Die einzigen Dinge, die Sie einige registrieren müssen Broadcast Receiver mit entsprechenden Absichten im Manifest, die Ihren Dienst aufrufen, wenn etwas auf dem Gerät passiert, aber dies bleibt bei der Android 3.1-Version.
BEARBEITEN:
Nach dem Android 3.1+ ab können Sie keine mehr verwenden Broadcast zum Starten Ihrer Anwendung, da alle Anwendungen nach Abschluss des Gerätestarts im inaktiven Zustand bleiben, und um die Anwendung zu starten, muss der Benutzer sie aufrufen (durch Berühren des App-Symbols).
Gemeinschaft
Wie von CommonsWare in der Antwort auf diese Frage angegeben (die Sie vermutlich alle gesehen haben, aber ignoriert haben), ist das Starten eines Dienstes bei der Installation nicht möglich – es ist einfach keine Sache, die in die Plattform implementiert ist.
Ein automatischer Start beim nächsten Booten ist jedoch möglich.
Wie in den Technischen Details für PlanB angegeben:
Plan B wird versuchen zu starten, sobald es heruntergeladen ist, aber in einigen Fällen müssen Sie eine SMS senden, um es zu starten.
Meine Vermutung ist, dass Sie auf einem gerooteten Telefon sind könnte starten können Service bei der Installation – aber es gibt keine Garantie dafür, dass das Telefon gerootet ist, weshalb PlanB in einigen Fällen den Empfang einer SMS verlangt, da dies vom registriert werden kann IntentFilter der App und dann verwendet, um die zu starten Service.
Ja, das wurde überprüft, aber Sie können die PlanB-Anwendung überprüfen, die ich in der Frage verlinkt hatte.
– Lalit Poptani
16. Dezember 2011 um 9:34 Uhr
“Ein automatischer Start beim nächsten Booten ist aber möglich.” — nicht auf Android 3.1+. Der Benutzer muss zuvor manuell eine Aktivität aus der Anwendung starten BroadcastReceiver wird funktionieren.
– CommonsWare
16. Dezember 2011 um 13:42 Uhr
10018800cookie-checkSo starten Sie einen Dienst, wenn .apk zum ersten Mal installiert wirdyes
Vielleicht hilft Ihnen dieser Beitrag: stackoverflow.com/questions/2227604/…?
– Yahor10
16. Dezember 2011 um 9:12 Uhr
@Lalit: Untersuchen Sie, was mit einer PUSH-Installation einer Anwendung aus dem Market passiert und was sie tun kann. Irgendetwas löst den Start von Plan B aus – er startet nicht automatisch. Ich habe es gerade installiert und frage mich, ob die Installation etwas an ihre Server gesendet hat, die dann eine E-Mail an mein Gerät gesendet haben. EIN
BroadcastReceiver
Das Abhören eingehender E-Mails von einer bestimmten E-Mail-Adresse könnte verwendet werden, um a zu startenService
. Danach verstehe ich nicht genug darüber, wie PUSH-Installationen aus dem Market funktionieren oder wie sie ohne Benutzereingaben installiert werden, sodass ich nicht weiter helfen kann.– Squonke
16. Dezember 2011 um 10:11 Uhr
@Lalit: Hallo, hast du eine Möglichkeit gefunden, den Dienst zu starten, wenn apk zum ersten Mal installiert wird?
– Mehul Joisar
6. März 2013 um 7:26 Uhr
Nein, es ist ohne einen UI-Teil in der Anwendung nicht möglich.
– Lalit Poptani
6. März 2013 um 7:27 Uhr
Vielen Dank für die schnelle Antwort. Ich habe noch einen Zweifel. Ist es also möglich, eine Anwendung ohne ein App-Symbol zu erstellen? Das bedeutet, dass die Anwendung nur aus Rundfunkempfängern und -diensten besteht.
– Mehul Joisar
6. März 2013 um 7:33 Uhr