接收服务中的数据包并将数据发送到更多活动

时间:2013-06-27 13:05:49

标签: android service android-activity handler packet

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

我在服务中使用此代码:

@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();
}

如何将每个数据包发送到正在运行的活动,以便此活动将由数据包控制?

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

您确实可以使用广播接收器。只是让你的服务发送一个sendBroadcast(...)的意图,你的活动应该有一个广播接收器,可以接收它并做它的东西。多个活动可以接收相同的广播消息。 您可以使用onPause()和onResume()函数更改布尔值以查看活动是否在前台运行,然后相应地处理内容。

您可以查看以下主题:How to have Android Service communicate 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

您可以在intent中添加多个额外变量,并使用getIntExtra(String name,int default)或getStringExtra(...)或getWhateverExtra(String name,默认值)在广播接收器中检索它们。