Android 如何按时钟时间更新片段
我试图用下面的逻辑在时钟时间更新片段,例如8PM。不幸的是,它没有更新片段。如有任何帮助/推荐,将不胜感激 我所做的:Android 如何按时钟时间更新片段,android,android-fragments,broadcastreceiver,alarmmanager,Android,Android Fragments,Broadcastreceiver,Alarmmanager,我试图用下面的逻辑在时钟时间更新片段,例如8PM。不幸的是,它没有更新片段。如有任何帮助/推荐,将不胜感激 我所做的: 已注册应用程序内的应用程序类,如下所示: alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent().setAction(AppConstants.INTENT_ACTION_UPDATE_DASHBOARD);
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);
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mDashboardUpdateReceiver, new IntentFilter
(AppConstants.INTENT_ACTION_UPDATE_DASHBOARD));
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);
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();
}
首先,
pendingent
不会触发本地广播。您不能在此处使用LocalBroadcastManager
其次,使用AlarmManager
更新UI是相当奇怪的。如果您的UI存在,则您有一个正在运行的进程,因此您可以使用进程中的某些东西(例如,ScheduledExecutorService
),而不必忙于处理AlarmManager
第三,您没有考虑到set(Calendar.HOUR\u OF_DAY,HOUR)
和Calendar.set(Calendar.MINUTE,MINUTE)
可能会将日历更改为过去。想象一下,如果您在23:00执行第一个代码段,hour
设置为22
,minute
设置为0
。您创建的日历
对象将用于今天,但用于今天的22:00,这是一个小时前(23:00)。您需要检查日历
,查看它是否是过去的日历,如果是过去的日历,则将添加()
一天,或者将其调整到未来某个时间