0

Привет и спасибо за помощь.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()», чтобы устройство могло снова заснуть?

Если я:

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 просто устройство никогда не просыпается.

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

Спасибо!

+0

как может пользователь может заборниках приложение виджет, когда телефон находится в режиме ожидания? экран заблокирован, не так ли? –

+0

@NAYOSO да, вы правы, но он может нажать виджет на экране блокировки, прежде чем экран заблокируется (и станет серым до блокировки). В любом случае мне нужно, чтобы он не спал до тех пор, пока он продолжает нажимать на виджет ... –

+0

Блокировка от зависания от диспетчера питания должна выполнять эту задачу, но я не знаю, работает ли она из виджета приложения (вне приложения) или нет –

ответ

0

Ну, я использовал Handler для вызова

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); 

}