2015-03-13 68 views
0

所有这些问题都指向同一个应用程序或不同应用程序在同一个设备中的不同应用程序中的类别。我想通过两个独立的设备向两个独立的应用程序发送数据。我尝试使用broadcastreceiver,但它没有奏效。这是我发送数据的片段。android在不同设备中通信两个应用程序

addressstring = String.valueOf(acrilocation.getText()); 
      if (addressstring != null && addressstring.length() > 0){ 
      Intent intent = new Intent(); 
      intent.setAction(Intent.ACTION_SEND); 
      intent.putExtra(Constants.LOCATION_DATA_EXTRA, addressstring); 
      intent.setType("text/plain"); 
      sendBroadcast(intent); 
      } else{ 
       Toast.makeText(getApplicationContext(), "Enter valid location address", Toast.LENGTH_SHORT).show(); 
      } 

但是当我使用下面的代码段收到我的其他应用程序中的数据时,它会失败。当我调试应用程序时,我得到空异常。

Intent intent = getIntent(); 
     String action = intent.getAction(); 
     String data = intent.getStringExtra(Intent.EXTRA_INTENT); 
     String type = intent.getType(); 
     useraddress.setText(data); 
      startActivity(intent); 

是否有另一种方法来实现这一目标?我的意思是将数据发送到另一个设备上安装的另一个应用程序和从另一个应用程序安装?

+0

这甚至工作怎么样?广播用于系统通信。一个应用程序如何了解其他设备上的其他应用程序?您必须使用网络或蓝牙或类似的数据传输。 – PaMaDo 2015-03-13 19:40:51

回答

0

连接在接受传入的套接字连接

通常的方法来执行此Android设备之间(或任何对等设备之间)是使用套接字网络。

您将一台或两台设备设置为'监听'套接字上的连接,然后在他们想要进行通信时接受另一台设备的连接(或者您可以拥有专用客户端和服务器,并且客户端始终启动连接)。

连接建立后,您可以来回发送消息。

还有的Android客户端服务器socket应用的例子很多,但一个我发现有用的是:

请注意,您可能必须在其上添加自己的“协议” - 例如,如果您发送的文件长度未知,没有任何特殊的“结束”字符,则可能需要添加一个字节(或几个字节来表示一个int,long等),以指示传输的长度,以便接收sid e知道它什么时候收到了所有的东西(或者在发生错误时它没有收到所有东西)。

连接在网络上不容许传入的连接(例如,大多数3G/4G)

在这些情况下,虽然没有什么理论上停止插座的工作,在实践中,许多移动运营商将不会允许传入的套接字连接。此外,您需要查找移动的公共IP地址,这是可能的,但额外的复杂性。如果您的解决方案将只在单个运营商的网络上运行,你可以实验,看看它的工作原理,但如果没有你可能会更好,更容易发现它在“中间”使用服务器:

  • 设备A connectes到服务器
  • 设备B connectes到服务器
  • 设备A请求连接的设备的地址的服务器和“发现的”设备B
  • 设备A发送消息给设备B.它实际上将消息发送到服务器并指示它将被发送到设备B
  • 服务器通知设备B一条消息可用于它(使用某种类型的消息通知,例如Google Cloud Messaging或只需通过设备定期轮询,看看他们是否有任何消息)。
  • 设备B从服务器

以上将工作在几乎任何网络,允许连接到互联网获取信息。它的缺点是需要服务器,但它可能是大多数移动网络的必要方法。

+0

我很感谢你的回答。但是,我的问题是设备不会在同一个Wi-Fi网络上。他们将比彼此更远。此解决方案是否有效? – 2015-03-16 05:27:40

+0

是的,只要您知道每个设备(或URL)的公共IP地址就行。您还需要了解任何防火墙问题。 – Mick 2015-03-16 09:05:46

+0

这听起来像解决我的问题,因此我会接受它作为答案。我想弄清楚在通信之前获取服务器的IP地址,以便客户端可以发送数据并接收响应。先生,谢谢你。 – 2015-03-18 23:49:06

相关问题