【发布时间】:2011-02-13 14:29:12
【问题描述】:
如 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);
}
【问题讨论】:
标签: android widget android-intent alarmmanager android-pendingintent