如 Android 开发指南中所述,如果您希望小部件更频繁地更新,您应该使用AlarmManager
设置不唤醒设备的警报。
原则上:不要使用AppWidgetProvider
类提供的标准机制,并且可以通过 xml 文件中的 android:updatePeriodMillis 轻松设置。
我很抱歉地问,但指南只是说“使用 AlarmManager,使用RTC
或ELAPSED_REALTIME
,......”但我到底如何发送一个意图来更新我的小部件丢失了!!!
有人可以说明我需要形成PendingIntent
模仿默认行为的代码吗?我不知道如何获取小部件 ID,我应该使用哪个操作等等......遗憾的是,开发指南此时停止解释!需要什么作为哪个动作的额外内容?
如果有人对我为什么要更频繁地更新超过 30 分钟感兴趣:我的小部件会显示下一辆公共汽车何时从车站出发。每 20 分钟有一班车,所以我有两个选择:每分钟更新一次小部件,显示下一班车的发车时间(这就是我想要的!!),或者,不太好,说明下一班车的发车时间所以我必须至少每20分钟更新一次!
现在:当设备处于睡眠状态时,当然,这不应该唤醒它——所以我对开发指南中这一部分的理解是,这是实现它的正确方法;有人认为我错了吗?哦,我想知道的另一件事:如果设备在应该更新小部件时处于睡眠状态,并且由于设备处于睡眠状态而没有发出警报,它会在唤醒时立即更新吗???
谢谢你的帮助!!
PS:我真的很想知道为什么小部件提供程序的 xml 定义不允许通过布尔开关简单地声明“不要唤醒设备”......这首先会让生活变得更加轻松!无论如何需要什么样的小部件来唤醒设备???;-)
这是我到现在为止的距离,但它不起作用 - 没有任何反应:
private void startAlarm(Context pContext) {
Log.d(TAG, "startAlarm");
AlarmManager am = (AlarmManager) pContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent("android.appwidget.action.APPWIDGET_UPDATE");
intent.setClass(pContext, getClass());
PendingIntent pi = PendingIntent.getBroadcast(pContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, pi);
}