Android: Broadcast-Empfänger für Bildschirm ein und Bildschirm aus

Lesezeit: 3 Minuten

Android Broadcast Empfanger fur Bildschirm ein und Bildschirm aus
Himura

Ich habe mich nur gefragt, ob es möglich ist, einen Broadcast-Empfänger zu registrieren, der Screen ON/OFF im Anwendungsmanifest erkennt. Der Grund, warum ich die programmierbare Methode nicht mag, ist, dass die App ausgeführt werden muss, um so etwas zu erkennen, während: „Anwendungen mit im Manifest registrierten Broadcast-Empfängern müssen nicht ausgeführt werden, wenn die Absicht ist Broadcast für die auszuführenden Empfänger” (Quelle: Professional Android 2 Application Development book)

Meine App ist eigentlich eine Lockscreen-App, die auf programmierbare Weise die ganze Zeit laufen muss :S

Gibt es einen Ausweg?

Ich versuche folgendes im Manifest:

<receiver android:name=".MyBroadCastReciever">
    <intent-filter>
        <action android:name="android.intent.action.SCREEN_OFF"/>
        <action android:name="android.intent.action.SCREEN_ON"/>
    </intent-filter>
</receiver>

und einfache MyBroadCastReciever-Klasse:

public class MyBroadCastReciever extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            Log.i("Check","Screen went OFF");
            Toast.makeText(context, "screen OFF",Toast.LENGTH_LONG).show();
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            Log.i("Check","Screen went ON");
            Toast.makeText(context, "screen ON",Toast.LENGTH_LONG).show();
        }
    }
}

  • Können Sie mir eine Probe geben, die funktioniert? Ich möchte etwas tun, wenn der Bildschirm gesperrt oder entsperrt wird.

    – محمد

    18. Januar 2015 um 13:42 Uhr

Android Broadcast Empfanger fur Bildschirm ein und Bildschirm aus
Sadeshkumar Periyasamy

Die beiden Aktionen zum Ein- und Ausschalten des Bildschirms sind:

android.intent.action.SCREEN_OFF
android.intent.action.SCREEN_ON

Wenn Sie jedoch einen Empfänger für diese Sendungen in einem Manifest registrieren, empfängt der Empfänger diese Sendungen nicht.

Für dieses Problem müssen Sie einen lang laufenden Dienst erstellen, der einen lokalen Broadcast-Empfänger für diese Absichten registriert. Wenn Sie auf diese Weise vorgehen, sucht Ihre App nur dann nach Bildschirm aus, wenn Ihr Dienst ausgeführt wird, was den Benutzer nicht irritiert.

PS: Starten Sie den Dienst im Vordergrund, damit er länger läuft.

Ein einfaches Code-Snippet sieht in etwa so aus:

IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(mScreenStateReceiver, screenStateFilter);

Vergessen Sie nicht, den Empfänger in der abzumelden Bedienung‘S aufZerstören:

unregisterReceiver(mScreenStateReceiver);

Nur für den Fall, dass Leute fragen, warum der Empfänger nicht mit den deklarierten Broadcasts im Manifest für ACTION_SCREEN_ON und ACTION_SCREEN_OFF funktioniert:

https://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_ON https://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_OFF

Sie können dies nicht über in Manifesten deklarierte Komponenten erhalten, sondern nur, indem Sie sich explizit mit Context.registerReceiver() dafür registrieren.

Dies ist eine geschützte Absicht, die nur vom System gesendet werden kann.

  • ok, also führt kein Weg daran vorbei? So werden Sperrbildschirm-Apps gemacht

    – Himura

    28. Februar 2012 um 7:30 Uhr

  • großartige Antwort, aber warum funktioniert der Empfänger nicht für diese Sendungen im Manifest?

    – Fehler passieren

    14. Juli 2015 um 8:59 Uhr

  • Wenn Sie im Manifest auf ACTION_SCREEN_OFF lauschen könnten, müsste das Betriebssystem einen neuen Prozess für Ihre App starten, wenn sie nicht ausgeführt wurde, als die Übertragung ausgelöst wurde. Die Android-Designer wollten dies verhindern, da dies oft impliziert, dass das Gerät kurz vor dem Übergang in einen Energiesparmodus steht.

    – Mike Playle

    3. Oktober 2016 um 8:10 Uhr

  • Bitte überprüfen Sie diesen Bildschirm OFF/ON Broadcast Listener ohne Service

    – Ankit Kumar Singh

    17. Oktober 2018 um 13:08 Uhr

  • Ich löse mit https://stackoverflow.com/a/59322064/9478814

    – Civani Mahida

    13. Dezember 2019 um 11:54 Uhr


Sie müssen einen Hintergrunddienst erstellen, um danach zu suchen. Dann können Sie es programmgesteuert festlegen.

915010cookie-checkAndroid: Broadcast-Empfänger für Bildschirm ein und Bildschirm aus

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

Privacy policy