So beheben Sie, dass BOOT_COMPLETED nicht funktioniert Android

Lesezeit: 7 Minuten

Benutzeravatar von yahya
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


Benutzeravatar von Piyush
Pijusch

Diese untenstehende Sache hat bei mir funktioniert

AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application>    

    <receiver android:name=".BootCompletedReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>

    <service android:name="NotifyingDailyService" >
    </service>

BootCompletedReceiver.class

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

Benutzeravatar von Phong Nguyen
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)

Geben Sie hier die Bildbeschreibung ein

  1. 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!)

  2. „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!

AUSSERDEM BIS JETZT (Android Oreo 8.0)wenn Android die Registrierung impliziter Broadcasts bei Manifest einschränkt (https://developer.android.com/about/versions/oreo/background.html#broadcasts) sind derzeit noch einige Sendungen von diesen Beschränkungen ausgenommen.
Und BOOT_ABGESCHLOSSEN ist der Erster sie erwähnen!
(https://developer.android.com/guide/components/broadcast-exceptions.html)

Übrigens ist dies die beste Lösung, die ich für diese Frage gefunden habe:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<receiver android:name=".BootReceiver" android:enabled="true" android:exported="true">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT"/>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
                <!--For HTC devices-->
                <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
            </intent-filter>
        </receiver>

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

Benutzeravatar von iman kazemayni
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

Benutzeravatar von Zar E Ahmer
Zar E. Ahmer

Und für Htc-Geräte hinzufügen com.htc.intent.action.QUICKBOOT_POWERON

    <receiver android:enabled="true" android:name=".receivers.BootUpReceiver">
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
            <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
         </intent-filter>
    </receiver>

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:

<receiver
    android:directBootAware="true"
    android:name=".BootCompletedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT" />
        <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
    </intent-filter>
</receiver>

Die Dokumentation finden Sie unter folgendem Link: https://developer.android.com/training/articles/direct-boot

Benutzeravatar von Arshid KV
Arschid KV

Das Problem liegt am Gerät. Einige Geräte erlauben nur internen Apps, diese Aktion zu empfangen (Beispiel: Android 5.1).

Sie können dies als Problemumgehung zu Ihrem Absichtsfilter hinzufügen

Handlung android:name="android.intent.action.USER_PRESENT"

Dies wird ausgelöst, nachdem der Benutzer das Gerät entsperrt hat.

Benutzeravatar von double-beep
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

1439060cookie-checkSo beheben Sie, dass BOOT_COMPLETED nicht funktioniert Android

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy