Android Lock Screen Widget

76

Einige Benutzer haben mich nach Android-Sperrbildschirm-Widgets für meine App gefragt. Ich glaube, sie möchten ein Widget, das auf ihren Sperrbildschirmen bleibt und ihnen die Interaktion mit der App ermöglicht.

Ich konnte keine offizielle Dokumentation dafür finden - das einzige, was ich gefunden habe, waren Apps, die Widgets für den Startbildschirm aufnehmen und für Sie auf dem Sperrbildschirm platzieren.

Gibt es Hinweise, wo ich mehr über das Erstellen echter Widgets für Sperrbildschirme erfahren kann?

Psychotik
quelle
3
Es gibt keine offizielle Unterstützung für das Ändern des Sperrbildschirms. Tatsächlich wäre ich ziemlich überrascht, wenn es möglich wäre, einen Hack zu entwickeln, der auf allen Geräten funktioniert.
CommonsWare
@ Commonsware: In der Tat gibt es. Schauen Sie sich das MixZing an, sie haben eine Option, um es zu aktivieren, und dieses Widget bleibt oben auf dem Sperrbildschirm. Es ist einmal in der kostenlosen Version verfügbar und funktioniert in meinem Wunsch ohne Rooting.
Xandy
1
@xandy: MixZing hat möglicherweise die Option, ein Sperrbildschirm zu sein, aber wie soll das dem Fragesteller helfen, einen zu erstellen?
Melinda Green
@ MelindaGreen: Zumindest mit MixZing als Beispiel wissen wir, dass es möglich ist
Yogesh Maheshwari
3
Sperrbildschirm-Widgets wurden nur mit Android 4.2 eingeführt. Vielleicht möchten Sie es sich noch einmal ansehen.
Martin

Antworten:

56

Die Interaktion mit dem Sperrbildschirm ist schwierig. Android ermöglicht grundlegende Operationen mit zwei Fensterflags (FLAG_SHOW_WHEN_LOCKED und FLAG_DISMISS_KEYGUARD). FLAG_SHOW_WHEN_LOCKED funktioniert ziemlich konsistent, da es auch dann auf dem Sperrbildschirm angezeigt wird, wenn die Sicherheit aktiviert ist (die Sicherheit wird nicht umgangen, Sie können nicht zu einem anderen Nicht-FLAG_SHOW_WHEN_LOCKED-Fenster wechseln).

Wenn Sie nur vorübergehend etwas tun, z. B. während Musik abgespielt wird oder ähnliches, sind Sie wahrscheinlich meistens in Ordnung. Wenn Sie versuchen, einen benutzerdefinierten Sperrbildschirm zu erstellen, gibt es viele ungewöhnliche Interaktionen auf den verschiedenen Android-Plattformen. ("Hilfe! Ich kann meinen Wecker nicht ausschalten, ohne mein HTC-Telefon neu zu starten").

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html

FLAG_SHOW_WHEN_LOCKED

Fensterflag: Spezielles Flag, mit dem Fenster angezeigt werden, wenn der Bildschirm gesperrt ist.

FLAG_DISMISS_KEYGUARD

Fensterflag: Wenn das Fenster gesetzt ist, wird der Schlüsselschutz nur dann geschlossen, wenn es sich nicht um einen sicheren Schlossschlüsselschutz handelt. Da ein solcher Schlüsselschutz aus Sicherheitsgründen nicht benötigt wird, wird er nie wieder angezeigt, wenn der Benutzer zu einem anderen Fenster navigiert (im Gegensatz zu FLAG_SHOW_WHEN_LOCKED, das sowohl sichere als auch nicht sichere Schlüsselschützer nur vorübergehend verbirgt, aber sicherstellt, dass sie wieder angezeigt werden, wenn der Benutzer zu wechselt eine andere Benutzeroberfläche, die sie nicht verbirgt). Wenn der Schlüsselschutz derzeit aktiv und sicher ist (erfordert ein Entsperrmuster), muss der Benutzer ihn noch bestätigen, bevor dieses Fenster angezeigt wird, es sei denn, FLAG_SHOW_WHEN_LOCKED wurde ebenfalls festgelegt. Konstanter Wert: 4194304 (0x00400000)

Kevin TeslaCoil
quelle
1
Danke, aber kann ich das für Widgets verwenden? Aus der spärlichen Dokumentation geht hervor, dass dies von einer Aktivitätsansicht verwendet werden kann, aber ich bin nicht sicher, wie ich dies für ein Widget festlegen soll, da das Betriebssystem das Widget rendert und die App nur Daten dafür sendet.
Psychotik
6
Nein, dies kann nur für Aktivitäten verwendet werden. Die einzige Möglichkeit, ein aktuelles Android "App Widget" ( developer.android.com/guide/topics/appwidgets/index.html ) auf dem Sperrbildschirm anzuzeigen, wäre ein Programm wie (Haftungsausschluss, meine App) WidgetLocker. Das "Lock Screen Widget" von MixZing ist eine Aktivität, kein "App Widget".
Kevin TeslaCoil
1
Wie lässt MixZing ihre Aktivität wie ein Widget aussehen?
Psychotik
2
Danke @ Kevin. Das war wirklich hilfreich. Eine Frage: Was tun Sie, um die Aktivität zu starten, wenn der Sperrbildschirm aktiviert ist, und nicht nur weiterhin anzuzeigen, ob der Bildschirm gesperrt ist, während die Aktivität bereits aktiv ist?
Andrew Hubbs
11
Sie können einen Rundfunkempfänger für SCREEN_OFF und / oder SCREEN_ON registrieren. Der Vorteil von SCREEN_OFF ist, dass der Benutzer den Aktiensperrbildschirm nicht unbedingt sehen muss, da er zum Zeitpunkt des Einschaltens des Bildschirms bereits festgelegt ist. Der Vorteil von SCREEN_ON ist, dass Sie inKeyguardRestrictedInputMode einchecken können, damit Sie wissen, dass der Bildsperrbildschirm aktiv ist. Manchmal schaltet sich der Bildschirm aus anderen Gründen aus, z. B. aus der Nähe des Näherungssensors.
Kevin TeslaCoil
28

Das offizielle Widget-Dokument für den Sperrbildschirm finden Sie hier

Bao Le
quelle
2
+1: Leider erfordert es Android 4.2 und höher und ich habe nur Android 2.2 :-(
k3b
1
Auch sie haben wir seit 5.0 entfernt
FindOut_Quran
Kaufen Sie das neue
Betriebssystem
11

Ich musste ein Sperrbildschirm-Widget für mein Projekt implementieren. Dabei habe ich einige Ressourcen angesammelt.

  1. Wenn Sie eine App haben, die Sie auf den Sperrbildschirm setzen möchten, machen Sie sie zuerst zu einem Appwidget . Sie können die AppWidgetKlasse verwenden, um dies zu tun.
  2. Verwenden Sie jetzt die AppWidgetHostKlasse aus der Android-API, um Ihren Sperrbildschirm zu einem Host für die Widgets zu machen. Ich weiß nicht, wie ich diesen Teil machen soll, aber es gibt einige existierende Implementierungen wie mylockandroid (Links unten).

Ressourcen

http://code.google.com/p/mylockforandroid/ (Hinweis: Dieser Code gilt für ältere Android-Versionen. Android 4.2 und höher verfügt über eine integrierte Unterstützung für Sperrbildschirm-Widgets.)

http://mylockandroid.blogspot.com/2010/03/widget-lockscreen-beta-11-r2.html

Mauryat
quelle
Wenn Sie ein Widget auf dem Sperrbildschirm anzeigen möchten, müssen Sie natürlich eine Aktivität auf SCREEN_ON erstellen. Innerhalb dieser Aktivität können Sie AppWidgetHost verwenden. Weil die Art und Weise, wie es in der Antwort steht, etwas mehrdeutig ist.