2011-05-17 34 views
0

我正在编写一个需要显示当前日期的Homewidget的应用程序。对于我已经使用报警管理器注册如下: -未启动的闹钟管理器事件(每天注册通知)

Intent intent = new Intent(HomeScreenWidgetProvider.ACTION_UPDATE_DATE); 
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetId); 
    intent.setData(getUriData(appWidgetId)); 
    PendingIntent datePendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 
     PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarms = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
    alarms.cancel(datePendingIntent); 
    **alarms.setRepeating(AlarmManager.RTC, getTimeForMidnight(), AlarmManager.INTERVAL_DAY, datePendingIntent);** 

正如你看到的,上面的代码的通知首先注册为下一12.00从那里上了一天的时间间隔。当我收到来自警报管理器的通知时,我会更新我的小部件中的日期。

虽然有一个大问题。当日期发生变化时(上午12点),我不会收到警报管理器事件。所以日期不会在我的主屏幕小部件中发生变化。

上述代码在模拟器中正常工作,但不在设备上。我正在使用Samsung Galaxy S 19000进行(实时)测试。

使用报警管理器有问题吗?或者是否有接收日期更改通知的另一种方式?

回答

0

我觉得在setRepeating()方法中,你应该设置第一个参数为AlarmManager.RTC_WAKEUP。如果您使用AlarmManager.RTC,则在设备处于睡眠状态时,不会触发警报事件。有关更多详细信息,请参阅有关AlarmManager的SDK文档。

此外,您可以注册一个BroadcastReciever,收听ACTION_DATE_CHANGED,您可以通过它收到日期更改事件。 希望它有帮助。

+0

感谢您的回复。但即使手机没有睡着,我也没有收到任何活动。昨天我在网上看到三星Galaxy S. Alos中存在固件缺陷,我已经注册了ACTION_DATE_CHANGED,但这是手动更改日期时的事件。如果您将日期倒退,它不会被解雇。 有没有人知道这样的缺陷?还是有什么可以做的,使其工作? – 2011-05-19 07:24:09