0

У меня есть что-то вроде следующего для инициирования IntentService к BroadcastReceiver с помощью повторных вызовов для опроса сервера обновлений:Отправить обновление для Повторяя BroadcastReceiver

AlarmManager pollManager; 
Intent pollIntent; 
PendingIntent pollPendingIntent; 

... 

pollIntent = new Intent(getActivity(), ActionUpdateReceiver.class); 
pollIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
pollIntent.putExtra(RECEIVER, resultReceiver); 
pollIntent.putExtra(USER, accountId); 

// This is the crux of my question 
pollIntent.putExtra(SOMETHING_THAT_UPDATES, updatingThing); 

pollPendingIntent = PendingIntent.getBroadcast(getActivity(), ACTION_REQUEST, 
     pollIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
pollManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
     POLL_INTERVAL, pollPendingIntent); 

В плане опроса сервера и с помощью ResultReceiver для получения сервера обновления, вышеупомянутый подход работает хорошо. Тем не менее, мне нужно предоставить некоторые отзывы для службы опроса, чтобы изменить мои запросы обновления.

Как я могу предоставить отзыв для службы опроса? Если требуются обновленные запросы, мне просто нужно отменить текущий будильник и настроить намерения снова? Есть ли лучший подход, чем отмена?

+0

ваш вопрос не ясно .. что «обеспечить обратную связь»? что такое сервер опроса? –

+0

Что именно неясно? Служба опроса - это «IntentService», вызываемая «BroadcastReceiver», как указано. Обратная связь, хорошо, обратная связь. Это обратная связь для обновления запросов, используемых службой опроса, и это зависит от выполнения за пределами службы повторного опроса. – user3570982

ответ

0

Я думаю, что ваша проблема ... Я думаю, что вы хотите, чтобы изменить значение на «updatingThing» где-то в проекте после установки менеджера сигнализации выше если это ваша проверка проблемы этого решения для установки сигнализации в коде выше, просто замените эту строку

pollIntent = new Intent(getActivity(), ActionUpdateReceiver.class); 

этим

pollIntent = new Intent(getActivity().getApplicationContext(), ActionUpdateReceiver.class); 

и PendingIntent также

pollPendingIntent = PendingIntent.getBroadcast(getActivity().getApplicationContext(), ACTION_REQUEST, 
     pollIntent, PendingIntent.FLAG_CANCEL_CURRENT); 

и поместить этот код, где вы хотите обратной связи вашего обновления

AlarmManager pollManager; 
Intent pollIntent; 
PendingIntent pollPendingIntent; 

... 

pollIntent = new Intent(getActivity().getApplicationContext(), ActionUpdateReceiver.class); 
pollIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
pollIntent.putExtra(RECEIVER, resultReceiver); 
pollIntent.putExtra(USER, accountId); 


pollIntent.putExtra(SOMETHING_THAT_UPDATES, updatingThing); // your update here 

pollPendingIntent = PendingIntent.getBroadcast(getActivity().getApplicationContext(), ACTION_REQUEST, 
     pollIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
pollManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
     POLL_INTERVAL, pollPendingIntent); 
+1

Я не думаю, что getApplicationContext() необходим; getActivity() отлично работает как контекст. Кроме того, это не кажется мне чем-то другим, чем просто отменять намерения как сказано ранее, что я и сделал. Во всяком случае, этот подход, похоже, работает, поэтому я думаю, что это ответ в конце концов. – user3570982

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