2010-09-25 5 views
29

Мое приложение запускается на событии докинга автомобиля, я хочу разбудить телефон (сделанный системой) и разблокировать экран, когда я подключу свое устройство. Возможно ли это?Как отображать активность, когда экран заблокирован?

+1

Надеюсь, это не так, я бы не хотел, чтобы мой телефон разблокировал ytime! (Я мог набрать по ошибке ...) –

+2

У меня возникает желание изменить это на «Как отображать мою активность, когда экран заблокирован», поскольку вы не можете «разблокировать» устройство программно в android ... – StrikeForceZero

+2

Действительно , как объясняет SrikeForceZero, вы не можете «разблокировать» устройство программно. Какие ответы ниже, которые, как вам кажется, могут показаться вам действительно полезными, показывают, как вы можете сделать конкретную активность * интерактивный * **, в то время как устройство в целом остается заблокированным **. –

ответ

21

Используйте Activity.getWindow(), чтобы получить окно вашей активности; использовать Window.addFlags(), чтобы добавить какой из следующих флагов в WindowManager.LayoutParams, которые вы хотите: FLAG_DISMISS_KEYGUARD, FLAG_SHOW_WHEN_LOCKED, FLAG_TURN_SCREEN_ON

Это как стандартный автомобиль док (и рабочий стол док) приложение реализует такое поведение.

+0

cool it works, но эти флаги доступны только на sdk версии 5 и выше :( – mishkin

+2

нашел универсальный подход, см. Мой ответ здесь http://stackoverflow.com/questions/3621599/wake-android-device-up/4541982#4541982 – mishkin

+0

не может показаться, что это работает на ICS –

39

Я использовать для повысит активность до верхнего уровня

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

Спасибо. Работает отлично, даже если я помещаю его в OnCreate. – Cerin

+0

Будет ли это работать над AlertDialog? – user1762507

+0

Не знаю. Пожалуйста, проверьте этот метод и сообщите нам! –

4

Вы сможете использовать FLAG_DISMISS_KEYGUARD только для телефонов, которые не имеют безопасности включены замки, как картина замок.

FLAG_SHOW_WHEN_LOCKED приведет только к вашему текущему действию сверху, если пользователь попытается переместиться в другое место, ему придется разблокировать экран.

В качестве альтернативы, вы можете добавить разрешение в манифесте:

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

И в своей деятельности на создание:

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

устаревший метод – user1940676

4

При использовании шаблона блокировки или ввода ПИН-кода мне нужно, чтобы добавить так как экран выключен менее чем за 5 секунд:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
Смежные вопросы