【问题标题】:Android Lock Screen App Widget: how to wake up the device (and send it back to sleep again after)Android Lock Screen App Widget:如何唤醒设备(并在之后再次将其送回睡眠状态)
【发布时间】:2013-06-04 23:39:42
【问题描述】:

您好,感谢您的帮助。

我有以下情况。

我有一个锁屏小部件,当用户点击它时,应用小部件会执行一些任务(自行更新)。

重点是:如果手机处于睡眠模式,用户点击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 中,设备永远不会唤醒。

欢迎提出任何建议!

谢谢!!

【问题讨论】:

  • 当手机处于睡眠模式时,用户如何点击应用小部件?是不是锁屏了?
  • @NAYOSO 是的,你说得对,但他可以在屏幕被锁定之前点击锁定屏幕上的小部件(并且在锁定之前变灰)。无论如何,只要他继续点击小部件,我就需要让它保持清醒......
  • 电源管理器的唤醒锁应该可以完成任务,但我不知道它是否在应用小部件(外部应用活动)中起作用
  • 我认为这是不允许的,因为如果有人可以使屏幕状态始终在应用程序之外,它会耗尽设备电池,但这只是我的想法 CMIIW,如果我会发布答案有关于此的其他信息:)

标签: android android-appwidget lockscreen wakelock appwidgetprovider


【解决方案1】:

嗯,我用了一个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);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多