0

サーバーの更新をポーリングするためIntentServiceに a への繰り返し呼び出しを開始するために、次のようなものがあります。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サーバーの更新を取得するために を使用するという点では、上記のアプローチはうまく機能します。ただし、更新クエリを変更するには、ポーリング サービスにフィードバックを提供する必要があります。

ポーリング サービスにフィードバックを提供するにはどうすればよいですか? 更新されたクエリが必要な場合、現在のアラームをキャンセルしてインテントを再度セットアップするだけでよいですか? キャンセルするよりも良い方法はありますか?

4

1 に答える 1

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);
于 2014-12-04T09:29:18.687 に答える