0

我必须在一项服务中接收数据包,然后活动活动应该接收它。最好的方法是什么?一些处理程序、消息、广播接收器......?

我有这个代码在服务中:

@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 communication with Activity

MaximumGoat 有一个很好的答案。下次搜索更好!

编辑:如果您创建要广播的 Intent,您可以使用 myIntent.putExtra(String name, variable var) 在 Intent 中添加额外信息。变量可以是很多类型,请检查: http: //developer.android.com/reference/android/content/Intent.html#putExtra%28java.lang.String,%20double []%29

您可以将多个额外变量放在一个意图中,并使用 getIntExtra(String name, int default) 或 getStringExtra(...) 或 getWhateverExtra(String name, 无论默认值) 在广播接收器中检索它们。

于 2013-06-27T13:15:04.527 回答