我正在尝试在时钟时间更新片段,例如8PM,具有以下逻辑。不幸的是,它没有更新片段。任何帮助/参考将不胜感激。
我做了什么:
在app的Application类中注册了AlarmManager,如下所示:
alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent().setAction(AppConstants.INTENT_ACTION_UPDATE_DASHBOARD);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
// Set the alarm to start at Consulting start time
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
在Fragment中监听AlarmManager,如下所示:
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mDashboardUpdateReceiver, new IntentFilter
(AppConstants.INTENT_ACTION_UPDATE_DASHBOARD));
并在广播收到时执行操作:
private BroadcastReceiver mDashboardUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Dashboard updating...");
updateCounters();
}
答案 0 :(得分:0)
首先,PendingIntent
不会触发本地广播。你不能在这里使用LocalBroadcastManager
。
其次,使用AlarmManager
更新UI非常奇怪。如果您的用户界面存在,则表示您正在运行流程,因此您可以在进程中使用某些内容(例如ScheduledExecutorService
),而不是使用AlarmManager
。
第三,您没有考虑到set(Calendar.HOUR_OF_DAY, hour)
和calendar.set(Calendar.MINUTE, minute)
可能会将Calendar
更改为过去。想象一下,如果您在23:00执行第一个代码段,hour
设置为22
而minute
设置为0
。您创建的Calendar
对象将在今天播出,但今天为22:00,即现在前一小时(23:00)。您需要检查Calendar
,查看它是否过去,如果是,add()
每天或以其他方式将其调整为将来某个时间。