2013-07-25 16 views
8

Nie chcę trwale omijać klawiatury, tylko na ten moment. Na przykład, gdy alarm jest wywoływany (np. Budzik) można odrzucić/odłożyć to bez ekranu odblokowującego. Chcę osiągnąć to samo zachowanie. Chcę uruchomić okno dialogowe, które powinno znajdować się na górze na zablokowanym ekranie. Mogę kliknąć przycisk w oknie dialogowym bez odblokowywania. Czy to możliwe? Jeśli tak, to w jaki sposób?Jak uruchomić okno dialogowe (np. Alarm dimiss/drzemki), które można kliknąć bez odblokowywania ekranu

Nie chcę następujące:

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

dlaczego nikt nie odpowiada? – user93796

Odpowiedz

4

Może być to będzie użyteczne. Wdrożenie okna flagę FLAG_SHOW_WHEN_LOCKED wraz z FLAG_TURN_SCREEN_ON w public WindowManager.LayoutParams()

lub użyć KeyguardManager klasy (jest przestarzałe API 13, ale nadal działa) przez

public KeyguardManager.KeyguardLock newKeyguardLock (String tag) 

FLAG_DISMISS_KEYGUARD użytkowania i/lub FLAG_SHOW_WHEN_LOCKED zamiast; pozwala to bezproblemowo ukryć blokadę klawiatury, gdy aplikacja przenosi się i wychodzi z pierwszego planu i nie wymaga żadnych specjalnych uprawnień. Umożliwia zablokowanie lub odblokowanie klawiatury. Uzyskaj instancję tej klasy, dzwoniąc pod numer Context.getSystemService(). Ta klasa jest opakowana przez KeyguardManager.


WindowManager.LayoutParams


KeyguardManager


nadzieję, że rozumiesz teraz, więc nie krępuj się zapytać, czy trzeba bardziej szczegółowe instrukcje kodowania dla tego problemu
Cheers ..

+0

'KeyguardManager.KeyguardLock' jest przestarzałe w API 13, jak na dokument android. Sądzę, że powinieneś pójść naprzód z 'FLAG_SHOW_WHEN_LOCKED' plus' FLAG_TURN_SCREEN_ON', jeśli chcesz włączyć urządzenie ze stanu uśpienia. – VenoM

+0

Tak, masz rację. 'KeyguardManager.KeyguardLock' jest metodą amortyzacji, sugerowałem tylko, że istnieje możliwość kodowania w ten sposób (nadal działa). A dzięki za wzmiankę o "FLAG_TURN_SCREEN_ON" naprawdę zapominam o tym. –

-1

jeśli typ okna jest wystarczająco wysoki. Możesz pokazać swoje okno powyżej ekranu blokady.

WindowsParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;

0

można dodać flagi do bieżącego okna, na przykład:

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); 

jeśli nie chcą go na stałe, tylko jasne flagi zostały dodane, kiedy nie są potrzebne, należy użyć metody: clearFlags (flagi).