0

Я пытаюсь обновить фрагмент в такт, например, 8PM, с логикой ниже. К сожалению, он не обновляет фрагмент. Любая помощь/ссылка будут оценены.Как обновить фрагмент в такт

Что я сделал:

  1. зарегистрировал AlarmManager в классе Application приложения, как показано ниже:

    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. прослушивает 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(); 
        } 
    

ответ

0

Во-первых, PendingIntent не вызывает местного вещания. Здесь вы не можете использовать LocalBroadcastManager.

Во-вторых, использование AlarmManager для обновления пользовательского интерфейса довольно странно. Если ваш пользовательский интерфейс существует, у вас есть процесс, поэтому вы можете использовать что-то в процессе (например, ScheduledExecutorService), а не суетиться с AlarmManager.

В-третьих, вы не принимаете во внимание, что set(Calendar.HOUR_OF_DAY, hour) и calendar.set(Calendar.MINUTE, minute) могут изменить Calendar, чтобы быть в прошлом. Представьте, если вы выполните свой первый фрагмент кода в 23:00, а hour будет установлен в 22 и minute будет 0. Объект, который вы создадите, будет на сегодня, но на 22:00 сегодня, что было за час до этого (23:00). Вы должны проверить Calendar, посмотреть, если он в прошлом, и если да, то add() в день или иным способом настроить его на некоторое время.

+0

Спасибо за помощь! – faisalm

Смежные вопросы