2016-05-02 13 views
0

Ich versuche, den Bildschirm eines Android-Handys auszuschalten.programmatisch Bildschirm ausschalten in Android-Telefon von einem anderen Thread

Ich las viele anderen Gespräche, und versuchte zwei Möglichkeiten, hier discribed: Turn off screen on Android

In der Tat, was ich brauche wirklich zu tun ist, um den Sperrbildschirm (denjenigen, der für die PIN fragt) zu starten. Ich war mir nicht sicher, wie ich das machen sollte und konnte keine Dokumentation darüber finden. Daher versuchte ich, den Bildschirm auszuschalten und hoffte, dass es den Sperrbildschirm anzeigen würde, wenn ich das Telefon wieder anschalte. Leider konnte ich meine Theorie nicht testen.

Erste Option:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");  
wl.acquire();  
wl.release(); 

Zweite Option:

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;  
params.screenBrightness = 0;  
getWindow().setAttributes(params); 

Erste Option tat nichts, und die zweite Option verursacht meine Anwendung zum Absturz bringen. Im Stack-Aufruf sah ich ein verdächtiges Protokoll: Only the original thread that created a view hierarchy can touch its views. Ich rufe diesen Code von einem anderen Thread, im Hintergrund (nicht der Haupt-Thread).
Ist es möglich, dass dies den Absturz verursacht? Wie kann ich dieses Problem überwinden?
Gibt es eine andere Möglichkeit, den Sperrbildschirm programmgesteuert zu starten, ohne den Bildschirm ausschalten zu müssen?

+0

poste deine Fehlerprotokolle – Stallion

+0

Ich weiß nicht, wie es speziell in Android gemacht wird, aber die meisten GUI-Frameworks bieten einige Möglichkeiten für einen beliebigen Thread _tasks_ in eine Warteschlange zu stellen, wo sie vom/a GUI Event gefunden und ausgeführt werden Handler-Thread. –

Antwort

0

In der ersten Option, fügen Sie auch ACQUIRE_CAUSES_WAKEUP hinzu. Das würde den Bildschirm aufwecken und den Sperrbildschirm anzeigen.

PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "Your Tag");  

Hoffe, das hilft.

+0

Danke. Leider funktioniert es immer noch nicht (nichts passiert ...). – Augustina

+0

Okay, ich habe den Beitrag noch einmal gelesen und ich hätte vielleicht früher falsch verstanden. Ich denke, Sie versuchen zu tun ist - sperren Sie den Bildschirm von Ihrer App selbst. Wenn das stimmt, wird diese Diskussion für Sie hilfreich sein - http://stackoverflow.com/questions/14352648/how-to-lock-unlock-screen-programmatically. –

Verwandte Themen