0

1 つのサービスでパケットを受信する必要があり、アクティブなアクティビティがそれを受信する必要があります。これを行う最善の方法は何ですか?いくつかのハンドラー、メッセージ、ブロードキャスト レシーバー...?

私はこのコードを使用しています:

@Override
public void onStart(Intent intent, int startId) {
    Runnable myRunnable = new Runnable() {
  public void run() {
    while(true) {
    try {
        DatagramSocket socket;
        socket = new DatagramSocket(4444);
        socket.setBroadcast(true);
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        socket.receive(packet);
    } catch (IOException e) {
        e.printStackTrace();
    }
     }
   }
};
myThread = new Thread(myRunnable);
myThread.start();
}

このアクティビティがパケットによって制御されるように、実行中のアクティビティにすべてのパケットを送信するにはどうすればよいですか?

回答ありがとうございます。

4

1 に答える 1

0

実際、放送受信機を使用できます。sendBroadcast(...) を使用してサービスにインテントを送信させるだけで、アクティビティにはそれを受信して​​操作できるブロードキャスト レシーバーが必要です。複数のアクティビティが同じブロードキャスト メッセージを受信できます。onPause() および onResume() 関数を使用してブール値を変更し、アクティビティがフォアグラウンドで実行されているかどうかを確認し、それに応じて処理することができます。

このスレッドを見ることができます: How to have Android Service communicate with Activity

MaximumGoat にはいい答えがあります。次回はもっとよく検索してください!

編集: ブロードキャストするインテントを作成する場合、myIntent.putExtra(String name, variable var) を使用してインテントに追加情報を入れることができます。変数は多くの型にすることができます。これを確認してください: http://developer.android.com/reference/android/content/Intent.html#putExtra%28java.lang.String,%20double[]%29

複数の追加変数をインテントに入れ、ブロードキャスト レシーバーで getIntExtra(String name, int default) または getStringExtra(...) または getWhateverExtra(String name, any default) を使用してそれらを取得できます。

于 2013-06-27T13:15:04.527 に答える