【发布时间】:2011-07-21 18:48:41
【问题描述】:
我的小部件应该在每天 0:00 刷新它的文本视图。在 widget_provider.xml 我设置了 android:updatePeriodMillis="1000" 但我读到最短更新周期是 30 分钟,我必须为此使用 alarmManager。所以我想要一个每天 0:00 触发刷新的闹钟。 UpdateService.class 处理刷新(根据日期为文本视图设置文本。直到午夜后半小时左右才调用该类)
在public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 方法中我使用了这段代码:
Intent intentN = new Intent(context, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentN, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendarN = Calendar.getInstance();
calendarN.setTimeInMillis(System.currentTimeMillis());
calendarN.add(Calendar.HOUR_OF_DAY, 20);
calendarN.add(Calendar.MINUTE, 44);
calendarN.add(Calendar.SECOND, 5);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendarN.getTimeInMillis(), 7000, pendingIntent);
(我现在正在尝试实际时间)
这是存放此代码的正确位置吗?为什么它不起作用?我在 UpdateService.java 中使用 toast 消息,但除了第一次安装应用程序时,我从未在 onStart(Intent intent, int startId) 方法中获得 toast。
提前致谢
更新
在可能凯文的帮助下,我重写了代码。我在 Activity 中尝试了这段代码,它可以工作:
Intent myIntent = new Intent(MainActivity.this, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(MainActivity.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 8000, pendingIntent);
Toast.makeText(MainActivity.this, "Start Alarm", Toast.LENGTH_LONG).show();
但是,如果我为 AppWidgetProvider 类修改它(并把它放在那里)它就不起作用。我什至连吐司都没有收到:
Intent myIntent = new Intent(context, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTimeInMillis(System.currentTimeMillis());
calendar2.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar2.getTimeInMillis(), 8000, pendingIntent);
Toast.makeText(context, "Start Alarm", Toast.LENGTH_LONG).show();
【问题讨论】: