2

私は Stackoverflow に関するいくつかのトピックを調べましたが、「Android で複数のアクティビティがバインドされたサービスと通信するにはどうすればよいですか?」という十分な答えを見つけることができませんでした。アプリケーションと 2 つのアクティビティで単純なバインド サービスを使用しています。サービスとアクティビティ間の通信を確立しましたが、アプリケーションにもう 1 つのアクティビティを追加しました。

メインのアクティビティであるアクティビティ A は、サービスからデータを取得します。サービスはサーブレットと通信し、アクティビティ A に送信するサーブレットからデータをフェッチし、このアクティビティはデータを表示します。ボタンをクリックして、アクティビティ A から新しいアクティビティを呼び出しています。アクティビティAはアクティビティBにデータを送信しますIntent。アクティビティAとBの間でデータを共有するために使用しています。アクティビティBには、アクティビティBのデータを更新してサービスに送信するボタンがいくつかあり、サービスはアクティビティへの応答を返しますB.

アクティビティがサービスと通信する方法は知っていますが、サービスが 2 つ以上のアクティビティと通信する方法がわかりません。

4

2 に答える 2

1

アクティビティBであなたと通信するServiceことは、アクティビティAで行うのと同じ方法です。アクティビティAのサービスから物事をリッスンする何らかの形式を登録していると思いますBroadcastReceiver。Bでもそれを行うことができます。両方活動は放送を受信します。

アクティビティBからサービスにコマンドを送信する場合は、通常の方法を使用startServiceしてインテントをサービスに送り返すことができます。これによってサービスが再起動されることはありませんが、サービスに新しいコマンドが再発行されるだけです。このコマンドは、サービスにonStartCommand関数を実装することで、サービスでインターセプトできます。このライフサイクル図を使用して、サービス機能の詳細をここで読むことができます。

したがって、両方のアクティビティのマニフェストにブロードキャスト受信インテントを登録するか、onStartの両方のアクティビティで同じインテントフィルターのリッスンを開始し、onPauseでそれらを再度シャットダウンすることでコードで登録できます。

于 2012-12-11T21:43:08.423 に答える
1

アクティビティが BroadcastReceiver を拡張する場合、アクティビティはアプリケーションから送信されるブロードキャストをリッスンします。サービスでは、アクティビティと通信したい時点で sendBroadcast(Intent intent) を呼び出す必要があります。

AndroidManifest.xml ファイルで、サービスが通信するアクティビティにインテント フィルターを追加する必要があります。これには、インテントのアクション名が含まれます。異なるインテントを送信したい場合は、異なるアクション名を付ける必要があると思います。

これは、そのようなことを実装する方法の例です。

于 2012-12-11T21:46:52.663 に答える