安卓 - 两台设备之间的通信

29

如果一个安装在两个设备上的Android应用程序想要相互通信,最好的方法是什么?是否可以在不使用短信的情况下直接连接设备?


Android Beam :) 但这只在少数新设备上可用。 - Jean-Philippe Roy
8个回答

23

根据您的需求和设置,有几种选择:

  • 如果您的设备非常靠近彼此(最多大约10米),则可以使用蓝牙进行通信,就像Derek建议的那样。
  • 如果您的设备离得比较远,但在彼此的WiFi范围内(最多大约100米),则它们可以使用点对点WiFi API相互通信,文档在这里(Android无线API的一部分)。 这不需要WiFi路由器存在,设备将找到彼此并直接通信。 但是,这需要Android 4.1或更高版本。
  • 如果您的设备位于同一本地网络上(即使用相同的WiFi路由器),则Android无线API也可以使用,即使它们本身不在彼此的范围内。
  • 如果这些选项都不可行/不能保证,那么我同意Derek的建议,最简单的方法是使用ServerSocket和Socket通过互联网创建服务器/客户端接口。这是一个示例应用程序。 您可能会遇到的主要问题是,如果服务器位于NAT(例如家庭互联网路由器)后面,则必须配置NAT将传入的数据包转发到您的Android服务器。

17

你可以使用BluetoothSockets通过蓝牙将它们连接起来。Android开发者网站上有相当好的文档。

http://developer.android.com/guide/topics/wireless/bluetooth.html

或者如果您愿意(并且两个设备都联网),您可以使用常规Socket。

对于服务端,http://developer.android.com/reference/java/net/ServerSocket.html;对于客户端,http://developer.android.com/reference/java/net/Socket.html

如果要传输大量数据,则Internet Socket具有更大的数据容量,并且传输速度更快。另一个优点是没有“超出范围”的概念。只要有互联网,您就可以在两个设备之间建立连接,而蓝牙则必须在蓝牙范围内才能连接。


1
你好 Derek,我有一些问题。希望你能回答。应用程序如何获取服务器的 IP 地址?另外,RMI 只在两个设备使用相同网络时才能工作,套接字是否也是如此? - Ruturaj
2
“WiFi-Direct” 不是一个选项吗? - Mick

3

2

取决于你所做的事情。如果你有一个服务器,你可以发送一些消息给它,并让另外一个设备拉取它(假设两个客户端都安装了该应用程序)。我认为这可能是最直观的方式(但这确实取决于你正在传达什么信息)。

短信和电子邮件也可能有效,但你(或用户)需要知道与设备相关的号码/电子邮件地址才行。


0

正如已经建议的那样,如果您的设备都连接到一个网络上,那么使用套接字是实现这一点最简单的方法。

这里有几件事情需要完成:

  1. 使用网络服务发现来查找运行您的应用程序的设备
  2. 使用套接字连接到您的应用程序的其他实例

您可以查看此处以获取完整的教程。


0

你应该看一下WifiDirect

Wi-Fi点对点(P2P)允许具有适当硬件的Android 4.0(API级别14)或更高版本的设备通过Wi-Fi直接连接到彼此,而无需中间接入点。


0

简短回答:是的

数据可以直接发送。

按范围顺序: 1 蓝牙 2 Wi-Fi Direct 3 也许...GSM硬件直接传输?

之后,再次按范围顺序提供选项: 4 网络共享或网络连接 5 互联网


-1

Android NSD API旨在实现您正在尝试实现的完全相同的功能!随SDK捆绑的示例很容易理解!

请查看:

Android NSD API示例


Android NSD仅用于发现,但问题是关于在两个不同物理设备上运行的两个应用程序之间的通信。 - Shoket Mahmood Ahmed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接