Android-устройство не выходит из спящего режима из-за отложенного действия (установлен FLAG_TURN_SCREEN_ON, но ничего не происходит)

Мое приложение получает wakelock, но не может разбудить устройство из Activity

Вот мой код:

public void onCreate(){
    super.onCreate();
    //acquire wakelock logic here
    new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            mHandler.obtainMessage().sendToTarget();
        }
    }, 30000);
.....
}
public Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        turnScreenOn();
    }
}

private void turnScreenOn() {
    Log.i("MainActivity", "Turn screen on");
    getWindow().addFlags(
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    );
}

В логах вижу, что TurnScreenOn выполняется, но экран по-прежнему выключен. Когда я выполняю этот метод из onCreate() и Activity из Service — все в порядке, но я хочу выполнить его из Activity. Я не нахожу никакой информации, что это запрещено, я не вижу никакой ошибки в журналах.

Можно ли как-то разбудить активность/приложение, не запуская его из службы? Если это невозможно - это где-то задокументировано?

заранее спасибо


person MercurieVV    schedule 28.07.2014    source источник


Ответы (1)


Я предполагаю, что вам следует использовать AlarmManager - вы должны зарегистрировать PendingIntent в диспетчере тревог и получить приемник сигнала тревоги - это гарантированно разбудит телефон. Тем не менее вам может понадобиться служба (WakefullIntentService) для управления блокировками для вас. См. пробуждение PowerManager, не выводящее устройство из строя для кода.

Кстати, TimerTasks в любом случае - это старый способ ведения дел - запланированный исполнитель пула - это то, что вы бы использовали сегодня IIRC.

person Mr_and_Mrs_D    schedule 28.07.2014