So beheben Sie, dass BOOT_COMPLETED nicht funktioniert Android
Lesezeit: 7 Minuten
Jaja
Ich weiß, dass Hunderte solcher Fragen gestellt wurden, aber ich habe sie alle eine Weile überprüft und konnte immer noch keine Lösung finden.
Ich habe diese Antwort auf “Android BOOT_COMPLETED wird nicht empfangen, wenn die Anwendung geschlossen wird” sagte BOOT_COMPLETED nicht an die Anwendung senden, es sei denn, der Benutzer startet Ihre Anwendung zuerst nach Android Version 3.1, aber ich sehe immer noch, dass einige Anwendungen dies tun, also muss es einen Weg geben. Ich muss wirklich damit umgehen, sonst bin ich auch dagegen, etwas ohne Benutzerinteraktion zu tun.
Hier ist mein AndroidManifest:
<manifest ... >
<!-- to be activated service on boot is completed -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application ... >
<!-- to receive data when boot completed -->
<receiver
android:name="myPackage.BootReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
Bearbeiten: In meinem Broadcastreceiver ist nicht viel zu sehen, aber an wen hier gefragt:
package myPackage
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Utils.LogI("BootReceiver", "BootReceiver received!");
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
// Do my stuff
}
}
}
Welches Gerät verwendest du zum Testen? Wenn es HTC ist – stackoverflow.com/questions/10411731/…
– JiTHiN
7. Dezember 2013 um 13:30 Uhr
Pijusch
Diese untenstehende Sache hat bei mir funktioniert
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent arg1) {
// TODO Auto-generated method stub
Log.w("boot_broadcast_poc", "starting service...");
context.startService(new Intent(context, NotifyingDailyService.class));
}
}
Serviceklasse
public class NotifyingDailyService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent pIntent, int flags, int startId) {
// TODO Auto-generated method stub
Toast.makeText(this, "NotifyingDailyService", Toast.LENGTH_LONG).show();
Log.i("com.example.bootbroadcastpoc","NotifyingDailyService");
return super.onStartCommand(pIntent, flags, startId);
}
}
@KarueBensonKarue Sie müssen Ihre App nach der Installation mindestens einmal öffnen. Oder Sie könnten es versehentlich „erzwingen“, was wiederum den Empfang von Sendungen verhindert.
– stdout
30. September 2016 um 21:11 Uhr
Dies funktioniert nicht mehr stackoverflow.com/a/19856367/770467 (3.1+)
– Androiderson
5. Oktober 2016 um 19:07 Uhr
Ich habe mir den Link angesehen, auf den Sie verwiesen haben, vielleicht verstehen Sie das falsch. es ist der Stoppzustand von a Anwendung nicht Aktivität. Anwendungen befinden sich in einem angehaltenen Zustand, wenn sie es sind zuerst installiert, aber noch nicht gestartet und wenn sie vom Benutzer manuell gestoppt werden (in Anwendungen verwalten). *Das bedeutet, dass der Benutzer die App nach der Installation mindestens einmal starten sollte, um die Anwendung zu aktivieren, dann kann die App alle impliziten Broadcasts vom Betriebssystem wie gewohnt empfangen. *
– Phong Nguyen
19. September 2017 um 6:34 Uhr
Es funktioniert nicht, wenn Sie Android mit targetAndroidSDK 27 oder höher erstellen.
– Sonida
20. März 2018 um 7:01 Uhr
Hat bei mir funktioniert, nachdem ich zum Intent-Filter hinzugefügt hatte
– Wilhelm Magno
13. Januar 2020 um 16:33 Uhr
Phong Nguyen
Dies ist eine alte und grundlegende Frage, aber viele Android-Entwickler sind jetzt immer noch verwirrt über dieses Problem, weil SIE NEHMEN SICH KEINE ZEIT, DIE DOKUMENTE SORGFÄLTIG ZU LESEN
Ich habe gesehen, wie jemand einige Links geteilt hat und das gesagt hat: “Das geht nicht mehr”es ist total falsch und falsch verstanden.
Zu diesem Anliegen: “Ich habe diese Antwort gesehen, die besagt, dass BOOT_COMPLETED nicht an die Anwendung gesendet wird, es sei denn, der Benutzer startet Ihre Anwendung zuerst nach Android Version 3.1.”lesen Sie bitte diese Zeilen (aus offiziellen Dokumenten: https://developer.android.com/about/versions/android-3.1.html#launchcontrols) richtig verstehen:
Beachten Sie, dass ein der gestoppte Zustand der Anwendung ist nicht dasselbe wie ein Beendeter Zustand der Aktivität. Das System verwaltet diese beiden gestoppten Zustände separat.
Anwendungen befinden sich in einem angehaltenen Zustand, wenn sie es sind zuerst installiert, aber noch nicht gestartet und wenn sie vom Benutzer manuell gestoppt werden (in Anwendungen verwalten). (Sie meinen Stopp erzwingen eine App)
Das bedeutet, dass ein Benutzer eine App starten sollte Mindestens einmal nach der Installation um die Anwendung zu aktivieren, kann die App wie gewohnt implizite Broadcasts vom Betriebssystem empfangen. (Nur einmal starten!)
„Ist jede App, die installiert und nie geöffnet wird auch nur einmal überhaupt ?”ja, es sind Spam- und Betrugs-Apps, diese Technik hilft dem Benutzer, das zu verhindern!
Abschließend lesen Sie bitte das Dokument sorgfältig durch und denken Sie zweimal nach Code einmal :3!
aber BOOT abgeschlossene Aktion funktioniert nicht auf einem Plus-Gerät. Haben Sie eine Alternative dafür?
– Feroz Siddiqui
5. November 2018 um 18:54 Uhr
@FerozSiddiqui hast du es versucht ?
– Phong Nguyen
6. November 2018 um 1:51 Uhr
Ich habe in Orio getestet, funktioniert nicht. Trotzdem sehr informativ, danke
– Naga
16. November 2018 um 13:42 Uhr
Es funktioniert nicht auf mi und One Plus-Telefonen, die es doppelt überprüft haben.
– Feroz Siddiqui
16. September 2019 um 9:36 Uhr
Das hat mit der Batterieoptimierung zu tun. Wenn Sie Ihre App aus der Batter-Optimierung entfernen, funktioniert sie
– Feroz Siddiqui
16. September 2019 um 9:37 Uhr
iman kazemayni
Einige neue Tablets und Android-Geräte verfügen standardmäßig über eine Sicherheitsanwendung. Manchmal blockieren diese Apps Ihren Autostart-Modus. Ein Beispiel für diese sicheren Apps ist MyAsus Manager. In diesem Fall muss der Benutzer im App-Manager „Autostart zulassen“ für alle Apps hinzufügen, die dieses BOOT_COMPLETED erhalten möchten
ist es möglich, das programmgesteuert zu tun?
– Leodev
13. Mai 2017 um 17:22 Uhr
Dasselbe gilt für Huiwei-Telefone. BOOT_COMPLETED wird nicht ausgelöst. Um es auszulösen, sollten Sie als Benutzer zu Einstellungen-> Apps-> App-Start-> Deaktivieren für eine benötigte App gehen.
– Aleksandr Urzhumtcev
26. April 2020 um 6:50 Uhr
Zar E. Ahmer
Und für Htc-Geräte hinzufügen com.htc.intent.action.QUICKBOOT_POWERON
Für andere, die immer noch ein Problem damit haben, wie ich, wenn Sie auf einem Gerät debuggen, das über eine Startsperre (PIN, Muster oder anderes) verfügt, müssen Betriebssystemversionen >= 7.0 abonnieren android.intent.action.LOCKED_BOOT_COMPLETED wie unten dargestellt:
Dies wird ausgelöst, nachdem der Benutzer das Gerät entsperrt hat.
doppelter Piepton
Das Problem, das ich hatte, war das BOOT_COMPLETED und QUICKBOOT_POWERON zusammen löste nicht immer meine Absicht aus, wenn ich das Gerät von meinem Android 6.0.1-Panel ausschaltete. Ich habe ziemlich lange im Internet gesucht und die Lösung durch Hinzufügen gefunden QUICKBOOT_POWEROFF zur Manifestdatei.
Siehe auch:
Der “Schnellstart” von HTC sendet weder die BOOT_COMPLETED-Intent noch löscht er die Intents vom Alarm-Manager
14390600cookie-checkSo beheben Sie, dass BOOT_COMPLETED nicht funktioniert Androidyes
Welches Gerät verwendest du zum Testen? Wenn es HTC ist – stackoverflow.com/questions/10411731/…
– JiTHiN
7. Dezember 2013 um 13:30 Uhr