2010-09-25 30 views
29

Moja aplikacja jest uruchamiana na stacji dokującej samochodu, chcę obudzić telefon (zrobione przez system) i odblokować ekran po podłączeniu urządzenia. Czy to możliwe?Jak wyświetlić aktywność, gdy ekran jest zablokowany?

+1

Mam nadzieję, że nie, nie chcę, aby mój telefon odblokował ytime! (Mogłem wybierać przez pomyłkę ...) –

+2

Kusi mnie edycja tego do "Jak wyświetlić moją aktywność, gdy ekran jest zablokowany", ponieważ nie można "odblokować" urządzenia programowo w Androidzie ... – StrikeForceZero

+2

Rzeczywiście , jak wyjaśnia SrikeForceZero, nie można "odblokować" urządzenia programowo. Poniżej znajdują się odpowiedzi, które sugerują, że naprawdę możesz pokazać, w jaki sposób możesz wykonać określone działanie * interaktywne * **, podczas gdy urządzenie ogólnie pozostaje zablokowane **. –

Odpowiedz

21

Użyj funkcji Activity.getWindow(), aby uzyskać okno aktywności; używać Window.addFlags(), aby dodać którykolwiek z następujących flag w WindowManager.LayoutParams że pragnienie: FLAG_DISMISS_KEYGUARD, FLAG_SHOW_WHEN_LOCKED, FLAG_TURN_SCREEN_ON

ten sposób średnia dok samochód (a dok biurko) aplikacja implementuje to zachowanie.

+0

fajnie działa, ale te flagi są dostępne tylko w sdk w wersji 5 i wyższej :( – mishkin

+2

znaleziono podejście uniwersalne, zobacz moją odpowiedź tutaj http://stackoverflow.com/questions/3621599/wake-android-device-up/4541982#4541982 – mishkin

+0

nie może sprawiać, że działa to na ICS –

39

jestem zarozumiały wykorzystania dla działalności na najwyższym poziomie

private Window wind; 
    @Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    /******block is needed to raise the application if the lock is*********/ 
    wind = this.getWindow(); 
    wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); 
    wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 
    /* ^^^^^^^block is needed to raise the application if the lock is*/ 
} 
+0

Dzięki. Działa doskonale, nawet jeśli umieszczę go na OnCreate. – Cerin

+0

Czy to działa na AlertDialog? – user1762507

+0

Nie wiem. Przetestuj tę metodę i powiedz nam! –

4

Będziesz mógł korzystać FLAG_DISMISS_KEYGUARD tylko dla telefonów, które nie mają zabezpieczeń włączoną blokadą zamków jak wzorzec.

FLAG_SHOW_WHEN_LOCKED przyniesie tylko bieżącą aktywność na górze, jeśli użytkownik spróbuje przenieść się gdzie indziej, będzie musiał odblokować ekran.

Alternatywnie, można dodać uprawnienia w swoim manifeście:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 

A w swojej działalności na tworzenie:

KeyguardManager manager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE); 
KeyguardLock lock = manager.newKeyguardLock("abc"); 
lock.disableKeyguard(); 
+2

przestarzała metoda – user1940676

4

Przy zastosowaniu wzoru blokady lub numeru PIN, co potrzebne, aby dodać a także, ponieważ ekran wyłączył się w ciągu mniej niż 5 sekund:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
Powiązane problemy