2012-05-29 4 views
6

Ich habe die letzten 2 Tage auf SW, Google und so weiter gesucht. Ich bin auf der Suche nach einer Möglichkeit, eine Aktivität zu implementieren, die mit dem nativen Android ICS-Sperrbildschirm wie in den folgenden Bildschirmen angezeigt wird. Diese Bildschirme kommen von Player Pro, aber ich habe festgestellt, dass auch andere Spieler (PlayerPro zum Beispiel) die gleiche Funktion haben, die genau gleich aussieht, deshalb denke ich, es ist etwas natives oder zumindest gibt es eine gemeinsame Möglichkeit, es zu implementieren.Android ICS native Lockscreen

Bisher konnte ich nur bekommen und Aktivität, die den Lockscreen mit diesen Fahnen ersetzen:

  • WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
  • WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD

mit einem BroadCaseReciever zu diesen Ereignissen:

  • Intent.ACTION_SCREEN_ON
  • Intent.ACTION_SCREEN_OFF
  • Intent.ACTION_USER_PRESENT

Mein Problem ist, dass ich meine Tätigkeit mit dem Lockscreen es nicht ersetzen angezeigt werden soll. Weißt du, wie man das erreicht?

Gibt es eine native-versteckte API, um dies zu tun?

können Sie mir einige Beispiele, die diese besondere Funktion implementieren verknüpfen?

Dank im Voraus;)

enter image description here enter image description here enter image description here

+0

Sehen Sie diesen Pfosten: http://stackoverflow.com/questions/4065201/android-how-can-i-programmatical-draw-text-on-key-guard-screen-lock-screen Aber, vielleicht seit die 4.0 ist möglich, sonst nutzt Player Pro sein eigenes API – Guillaume

+0

was meinst du mit "seiner eigenen API"? Übrigens haben auch andere Spieler die gleiche Funktion (PowerAmp zum Beispiel), also denke ich, dass es nicht etwas ist, das von den Spielern von PlayerPro entwickelt wurde. –

+0

Ist es vielleicht ein Dialogfragment, das das Flag "Show When Locked" verwendet? BEARBEITEN: dort scheint auch ein FLAG_SPLIT_TOUCH zu sein, der Berührungen außerhalb des Fensters erlaubt, um zu diesem Fenster übertragen zu werden, wenn es die Markierung auf ... Scheint, wie die Kombination von diesen zwei es –

Antwort

7

Ich denke, dass Sie nach der Audio Controls "Fernansicht" (RemoteControlClient) API in Android 4.0 (API-Ebene 14) hinzugefügt suchen. Ich fand the RemoteControlClient API im Android Entwickler-Dokumentation, die:

Belichtungsinformationen ermöglicht gemeint von Fernbedienungen verbraucht werden anzeigen kann Metadaten, Grafik und Medien Transportsteuertasten.

(Es wurde aus der this page verknüpft.)

Anmerkung: Ich habe noch nie diese API selbst verwendet, so dass ich entschuldige mich, wenn dies für Sie nicht funktioniert.

+0

+1 Dies ist definitiv, was er sucht, und was er für native Integration mit dem Sperrbildschirm verwenden sollte. – kcoppock

+0

yeee ... endlich die Antwort, nach der ich gesucht habe. +1 und Kopfgeld. Ich wusste, dass es eine API gab, aber ich konnte sie nicht finden. Vielen Dank, ich bin so glücklich, dass ich endlich den Lockscreen implementieren kann: D. –

+0

Ich bin froh, Ihnen behilflich zu sein und viel Glück :) – scorpiodawg

1

Sie tun es fast richtig. Machen Sie weiter, was Sie mit dem BroadcastReceiver tun. Das ist der Weg zu gehen. Für das Fenster, das sind die Flags, die Sie verwenden müssen:

  • WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
  • WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL

Sie nicht Verwendung FLAG_DISMISS_KEYGAURD

Was diese Flags bewirken: SHOW_WHEN_LOCKED ermöglicht es, dass Ihre Aktivität oben auf dem Sperrbildschirm angezeigt wird. Mit FLAG_NOT_TOUCH_MODAL können Berührungsereignisse, die nicht in Ihrer Aktivität enthalten sind, zu den anderen Aktivitäten verschoben werden, dh der Benutzer kann den Bildschirm entsperren. FLAG_DISMISS_KEYGUARD wird den Sperrbildschirm los, so dass wir ihn nicht verwenden.

Definieren Sie diesen Stil in Ihren res/values ​​/ styles.XML-Datei

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.FloatingTranslucent" parent="android:Theme.Translucent.NoTitleBar"> 
    <item name="android:windowIsFloating">true</item> 
    </style> 
</resources> 

In Ihrem Manifest definieren Sie Ihre Aktivität Stil

<activity android:name=".SampleActivity" android:theme="@style/Theme.FloatingTranslucent"> 
... 
</activity> 

Was das bedeutet ist, macht Ihre Aktivität vollständig durch und Wrap Inhalt sehen.

Jetzt sollte sich Ihre Aktivität über dem Sperrbildschirm befinden, sodass Sie den Sperrbildschirm und Ihre App berühren können, wenn Ihre Aktivität nicht in voller Größe angezeigt wird.

Prost.

+0

hast du es schon so implementiert? weil ich probierte und sobald ich Androiden einsetzte: windowIsFloating zu true ich kann die Tätigkeit nicht erhalten, um auf dem keyguard zu zeigen, selbst wenn ich FLAG_SHOW_WHEN_LOCKED setzte –

+0

ich versuchte auch, TYPE_KEYGUARD_DIALOG als Fenstertyp zu setzen, aber änderte nichts. –

+0

Hallo @ Zaid-Daghestani hättest du eine Lösung dafür? http://stackoverflow.com/questions/33466950/creating-a-real-lockscreen-module-for-android –