0

嗨,感謝您的幫助。Android鎖屏應用小部件:如何喚醒設備(並在發送後重新進入睡眠狀態)

我有以下情況。

我有一個Lock Screen Widget,當用戶點擊它時,App Widget執行一些任務(更新自己)。要點是:如果手機處於睡眠模式並且用戶點擊App Widget,App Widget會自行更新,但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是的,你說得對,但他可以在屏幕鎖定之前點擊鎖定屏幕上的Widget(在鎖定之前會變灰)。無論如何,只要他繼續點擊Widget,我需要保持清醒狀態... –

+0

電源管理器喚醒鎖定應該完成任務,但我不知道它是否從應用程序窗口部件(外部應用程序活動)運行或不 –

回答

0

好了,我用了一個處理程序來調用

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

} 
相關問題