2013-06-27 48 views
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(); 
} 

我怎么可能每一个数据包发送到运行活动使本次活动将数据包进行控制?

感谢您的回答。

回答

0

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

你可以看一下这个线程:How to have Android Service communicate with Activity

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

编辑: 如果您创建要广播的意图,则可以使用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(字符串名称,无论默认值)。

+0

我在那篇文章中,但在某处我读到broadcastreceiver应该只用几秒钟,所以我不确定这是不错的解决方案。但我会尝试,谢谢你的回答。 – Tunerx

+0

但是,我怎么能发送数据包通过呢?当我使用'sendBroadcast(新的意图(RefreshTask.REFRESH_DATA_INTENT));'它只是发送字符串与识别器,但没有什么可用......我从来没有这样做过 – Tunerx

相关问题