Виджет Android Lock Screen App Widget: как разбудить устройство (и снова отправить его в спящий режим после)

Привет и спасибо за вашу помощь.

У меня следующая ситуация.

У меня есть виджет экрана блокировки, когда пользователь нажимает на него, виджет приложения выполняет некоторые задачи (самообновляется).

Дело в том, что если телефон находится в спящем режиме и пользователь нажимает на виджет приложения, виджет приложения обновляется, но сам виджет приложения не виден.

Поэтому мне нужно разбудить устройство, когда пользователь коснется виджета блокировки экрана, и после этого он может снова заснуть :-) -

Поэтому я мог бы использовать:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "bbbb");
wl.acquire();

В AppWidgetProvider. Дело в том, как мне вызвать «release ()», чтобы устройство могло вернуться в спящий режим?

If I do:

    PowerManager pm = (PowerManager) ctxt.getSystemService(Context.POWER_SERVICE);
    WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "bbbb");
    wl.acquire();
    wl.release();

в AppWidgetProvider просто устройство никогда не просыпается.

Любое предложение более чем приветствуется!

Спасибо!!


person Lisa Anne    schedule 04.06.2013    source источник
comment
как пользователь может нажимать на виджет приложения, когда телефон находится в спящем режиме? экран заблокирован, не так ли?   -  person Niko Adrianus Yuwono    schedule 04.06.2013
comment
@NAYOSO да, вы правы, но он может коснуться виджета на экране блокировки до того, как экран заблокируется (и станет серым перед блокировкой). В любом случае, мне нужно, чтобы он не спал, пока он продолжает нажимать на виджет...   -  person Lisa Anne    schedule 04.06.2013
comment
блокировка пробуждения от диспетчера питания должна выполнять задачу, но я не знаю, работает ли она из виджета приложения (вне активности приложения) или нет   -  person Niko Adrianus Yuwono    schedule 04.06.2013
comment
и я думаю, что это не разрешено, потому что это разрядит батарею устройства, если кто-то может сделать состояние экрана всегда включенным вне приложений, но это просто мое мышление CMIIW, я опубликую ответ, если у меня будет другая информация об этом :)   -  person Niko Adrianus Yuwono    schedule 04.06.2013


Ответы (1)


Ну, я использовал обработчик для вызова

wl.release()

через 60 секунд:

public class AppWidget extends AppWidgetProvider {

@Override
public void onUpdate(Context ctxt, AppWidgetManager mgr, int[] appWidgetIds) {
    ComponentName thisWidget = new ComponentName(ctxt, AppWidget.class);
    int[] allWidgetIds = mgr.getAppWidgetIds(thisWidget);
    Intent i = new Intent(ctxt, UpdateService.class);
    i.putExtra("widgetsids", allWidgetIds);
    ctxt.startService(i);

    PowerManager pm = (PowerManager) ctxt
            .getSystemService(Context.POWER_SERVICE);
    final WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
            | PowerManager.ACQUIRE_CAUSES_WAKEUP, "bbbb");
    wl.acquire();
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            wl.release();
        }
    }, 60000);

}
person Lisa Anne    schedule 04.06.2013