私は古典的な仕事をしているようですが、それを行う方法の例を見つけることができません。
何かをダウンロードしたいのですが。さて、私はWebサービスを呼び出して応答を取得します...しかし、それはほとんど同じです。
これを行うために、ジョブを実行するスレッドを生成するサービスを開始するアクティビティがあります。
次に、サービスを開始したアクティビティで取得したデータを使用します。
(結果を表示するジョブを処理する別のアクティビティを開始するのは簡単だと思います)
私の問題は、サービスが何か(それを開始したアクティビティまたは別のアクティビティ)に何かを通知する方法ですか?
例へのポインタは大歓迎です。
よろしく
アクティビティがBroadcastReceiverで取得するsendBroadcast()を介して、データとともにブロードキャストインテントを送信します。
その例を次に示します。 https://github.com/commonsguy/cw-Android/tree/master/Service/WeatherAPI Doc: http://developer.Android.com/ reference/Android/content/BroadcastReceiver.html
Googleのドキュメントによると、Activity
とService
が同じアプリ内にある場合、送信される情報が送信されないため、sendBroadcast(インテント)よりも LocalBroadcastManager を使用することをお勧めします傍受のリスクを排除するシステムを通じて。
使い方はとても簡単です。
アクティビティでBroadcastReceiver
を作成し、onResume()メソッドにリスナーを動的に追加します。
private BroadcastReceiver bReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//put here whaterver you want your activity to do with the intent received
}
};
protected void onResume(){
super.onResume();
LocalBroadcastManager.getInstance(this).registerReceiver(bReceiver, new IntentFilter("message"));
}
protected void onPause (){
super.onPause();
LocalBroadcastManager.getInstance(this).unregisterReceiver(bReceiver);
}
そして、サービスでは、LocalBroadcastManagerのインスタンスを取得し、それを使用してインテントを送信します。私は通常、次のような独自の方法でそれを入れます:
private void sendBroadcast (boolean success){
Intent intent = new Intent ("message"); //put the same message as in the filter you used in the activity when registering the receiver
intent.putExtra("success", success);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
ユーザー定義クラスなど、さまざまなタイプのデータを返す必要がある場合は、bindService
とコールバックを試すことができます。これにより、sendBroadcast
よりもパーセル可能なインターフェースの実装を回避できます。
私の投稿の例をご覧ください:
https://stackoverflow.com/a/22549709/2782538
さらに、IntentService
を使用すると、ResultReceiver
を調べることができます。詳細とサンプルはこの投稿にあります:
それが役に立てば幸い。
Pending Intent、Event Bus、MessengerまたはBroadcast Intentsサービスからデータを取得してアクティビティ/フラグメントに戻し、いくつかの操作を実行するデータについて。
私のブログ投稿 は、これらすべてのアプローチをカバーしています。