2013-07-25 8 views
8

Ich möchte Keyguard nicht permanent umgehen, nur für diesen Moment. Zum Beispiel wenn ein Alarm ausgelöst wird (zB Weckalarm) i kann es entlassen/schlummern, ohne den Bildschirm zu entsperren. Ich möchte das gleiche Verhalten erzielen. Ich möchte einen Dialog starten, der auf dem gesperrten Bildschirm oben sein sollte. Ich kann auf den Knopf im Dialog klicken, ohne das Schloss zu entsperren. Ist das möglich? Wenn ja wie?So starten Sie einen Dialog (wie Alarm Dimiss/Snooze), der angeklickt werden kann, ohne den Bildschirm zu entsperren

ich nicht folgendes wollen:

private void unlockScreen(Context context){ 
     Log.d("dialog", "unlocking screen now"); 
     PowerManager powermanager = ((PowerManager)context.getSystemService(Context.POWER_SERVICE)); 
     WakeLock wakeLock = powermanager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag"); 
     wakeLock.acquire(); 
     Window wind = DialogActivity.this.getWindow(); 
     wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); 
     wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 


    } 
+0

warum antwortet niemand? – user93796

Antwort

4

dieser Wille nützlich sein kann. Implementieren Fenster Flagge FLAG_SHOW_WHEN_LOCKED zusammen mit FLAG_TURN_SCREEN_ON in public WindowManager.LayoutParams()

oder können Sie KeyguardManager Klasse verwenden (in API 13 als veraltet, funktioniert aber immer noch) von

public KeyguardManager.KeyguardLock newKeyguardLock (String tag) 

Verwenden FLAG_DISMISS_KEYGUARD und/oder FLAG_SHOW_WHEN_LOCKED statt; Auf diese Weise können Sie die Tastensperre nahtlos ausblenden, während sich Ihre Anwendung in den Vordergrund und aus dem Vordergrund bewegt, und es sind keine speziellen Berechtigungen erforderlich. Ermöglicht das Sperren oder Entsperren der Tastatur. Rufen Sie eine Instanz dieser Klasse auf, indem Sie Context.getSystemService() aufrufen. Diese Klasse wird von KeyguardManager verpackt.


WindowManager.LayoutParams


KeyguardManager


Hoffe, dass Sie jetzt verstehen, aber fühlen Sie sich frei zu fragen, ob Sie weitere detaillierte Codierung Anweisungen für dieses Problem
Prost brauchen ..

+0

'KeyguardManager.KeyguardLock' ist in API 13 gemäß Android-Dokument veraltet. Ich denke also, Sie sollten mit 'FLAG_SHOW_WHEN_LOCKED' plus' FLAG_TURN_SCREEN_ON' fortfahren, wenn Sie das Gerät aus dem Ruhezustand schalten wollen. – VenoM

+0

Ja, Sie haben Recht. 'KeyguardManager.KeyguardLock' ist eine abgeschriebene Methode, ich habe nur vorgeschlagen, dass es auch eine Möglichkeit gibt, auf diese Weise zu codieren (funktioniert immer noch). Und danke für die Erwähnung von 'FLAG_TURN_SCREEN_ON' Ich vergesse das wirklich. –

-1

wenn Ihr Windows-Typ ist hoch genug eingestellt. Sie können Ihr Fenster über dem Sperrbildschirm anzeigen.

WindowsParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;

0

können Sie Flags aktuelle Fenster, wie folgt hinzufügen:

win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
    | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); 

, wenn Sie es dauerhaft nicht wollen, nur klare Flags, die Sie hinzugefügt, wenn Sie sie nicht benötigen, verwenden Sie die Methode: Clear (Flaggen).