android: broadcast-receiver für screen on und screen off
Ich wurde gerade gefragt, ob es möglich ist, sich ein broadcast-receiver, der erkennt, Screen ON/OFF in der Anwendung manifestieren.
Der Grund, warum ich nicht wie die programmierbare Methode ist, dass es erfordert die app gestartet sein, um zu erkennen, wie ein Ding, während:
"Anwendungen mit dem Broadcast Receiver registriert, die im manifest nicht ausgeführt werden, wenn die Absicht ist die Sendung für den Empfänger zu führen" (Quelle: Professional Android 2 Application Development Buch)
Meine app ist eigentlich eine lockscreen-app, die mithilfe der programmierbaren Art und Weise ausgeführt werden muss die ganze Zeit :S
Gibt es eine Möglichkeit, um es?
Ich versuche im folgenden, die 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();
}
}
}
InformationsquelleAutor himura | 2012-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den zwei Aktionen für screen on und off sind:
Aber wenn Sie sich registrieren, einen Empfänger für diese Sendungen in einem manifest, dann kann der receiver nicht empfangen diese broadcasts.
Für dieses problem, die Sie haben, um einen lange Laufenden Dienst, der die Registrierung eines lokalen broadcast-receiver für diese Absichten. Wenn Sie auf diese Weise, dann Ihre app Aussehen wird für die screen-off nur, wenn Ihr Dienst ausgeführt wird, die nicht reizen Benutzer.
PS: starten Sie den Dienst in den Vordergrund zu stellen, dann läuft es länger.
Einem einfachen code-snippet wird so etwas wie dieses:
Vergessen Sie nicht, um die Registrierung der Empfänger in der Service's onDestroy:
Nur für den Fall für Menschen, die Fragen, warum der Empfänger funktioniert nicht mit der declare-Sendungen im manifest für ACTION_SCREEN_ON und ACTION_SCREEN_OFF:
https://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_ON https://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_OFF
tolle Antwort, aber warum-Empfänger nicht funktioniert für diese Sendungen im manifest?
Wenn Sie hören könnte, für ACTION_SCREEN_OFF in dem manifest, das OS hätte starten Sie einen neuen Prozess für die app, wenn es nicht läuft, wenn die Sendung ausgelöst wurde. Die Android-Designer wollten dies verhindern, da es oft bedeutet, dass das Gerät in einem low-power-Zustand.
Überprüfen Sie bitte das Bildschirm OFF/ON broadcast listener ohne service
InformationsquelleAutor Sadeshkumar Periyasamy
Müssen Sie erstellen Sie einen hintergrund-Dienst zu überprüfen. Dann können Sie es programmatisch.
InformationsquelleAutor wildapps