Подтвердить что ты не робот

Как отображать активность, когда экран заблокирован?

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

4b9b3361

Ответ 1

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

    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*/
}

Ответ 2

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

Таким образом приложение стандартной док-станции (и настольной док-станции) реализует это поведение.

Ответ 3

Вы сможете использовать 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(); 

Ответ 4

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

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);