如何在时钟时间更新片段

时间:2016-03-11 16:53:28

标签: android android-fragments broadcastreceiver alarmmanager

我正在尝试在时钟时间更新片段,例如8PM,具有以下逻辑。不幸的是,它没有更新片段。任何帮助/参考将不胜感激。

我做了什么:

  1. 在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);
    
  2. 在Fragment中监听AlarmManager,如下所示:

    LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mDashboardUpdateReceiver, new IntentFilter
            (AppConstants.INTENT_ACTION_UPDATE_DASHBOARD));
    
  3. 并在广播收到时执行操作:

    private BroadcastReceiver mDashboardUpdateReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
             Log.d(TAG, "Dashboard updating...");
             updateCounters();
         }
    

1 个答案:

答案 0 :(得分:0)

首先,PendingIntent不会触发本地广播。你不能在这里使用LocalBroadcastManager

其次,使用AlarmManager更新UI非常奇怪。如果您的用户界面存在,则表示您正在运行流程,因此您可以在进程中使用某些内容(例如ScheduledExecutorService),而不是使用AlarmManager

第三,您没有考虑到set(Calendar.HOUR_OF_DAY, hour)calendar.set(Calendar.MINUTE, minute)可能会将Calendar更改为过去。想象一下,如果您在23:00执行第一个代码段,hour设置为22minute设置为0。您创建的Calendar对象将在今天播出,但今天为22:00,即现在前一小时(23:00)。您需要检查Calendar,查看它是否过去,如果是,add()每天或以其他方式将其调整为将来某个时间。