Android - 两台设备之间的通信

Posted

技术标签:

【中文标题】Android - 两台设备之间的通信【英文标题】:Android - communicating between two devices 【发布时间】:2012-03-25 09:57:31 【问题描述】:

安装在两台设备上的 android 应用相互通信的最佳方式是什么?设备可以不使用短信直接连接吗?

【问题讨论】:

Android Beam :) 但这仅适用于少数新设备。 【参考方案1】:

您有多种选择,具体取决于您的要求和设置:

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

【讨论】:

【参考方案2】:

您可以使用 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 套接字具有更大的数据容量并且速度会更快。另一个优点是没有“超出范围”之类的东西。您可以在有互联网的地方连接两台设备,而使用蓝牙时,它们必须在彼此的蓝牙范围内

【讨论】:

你好 Derek,我有一些问题。我希望你能回答。应用程序应该如何获取服务器的 IP 地址?并且 RMI 仅在两个设备使用相同网络时才有效,对于套接字是否相同? “WiFi-Direct”也不是一个选项吗?【参考方案3】:

您可以使用PubNub。它处理所有网络,您应该只关心消息。 它有很棒的 AP​​I 可以工作。

(感谢@Ian Jennings:Can we send data from an android device to another android device directly (p2p) without server in the middle?)

【讨论】:

【参考方案4】:

取决于你在做什么。如果你有一个服务器,你可以向它发送一些消息并让它被另一个设备拉取(假设两个客户端都安装了应用程序)。我认为这将是最直观的方式(但这实际上取决于您所交流的内容)。

短信和电子邮件可能会起作用,但您(或用户)需要知道与设备关联的号码/电子邮件才能做到这一点。

【讨论】:

【参考方案5】:

你应该看看WifiDirect

Wi-Fi 点对点 (P2P) 支持 Android 4.0(API 级别 14)或更高版本 具有适当硬件的设备直接连接到每个 其他通过没有中间接入点的 Wi-Fi。

【讨论】:

【参考方案6】:

正如已经建议的那样,如果您的设备都连接到网络,那么套接字是完成此任务的最简单方法。

这里有一些事情要完成:

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

如需完整教程,您可以check this out

【讨论】:

【参考方案7】:

简短回答:是的

数据可以直接发送。

按范围排列: 1 蓝牙 2 无线直连 3 也许.. GSM 硬件直接?

之后,再次按范围顺序选择: 4 系绳或网络 5 互联网

【讨论】:

【参考方案8】:

android NSD API 旨在完成您想要实现的完全相同的事情!与 SDK 捆绑的示例不言自明!

请检查:

Android NSD API example

【讨论】:

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

以上是关于Android - 两台设备之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

如何通过wifi iOS和android之间进行通信?

思科设备不同vlan之间通过单臂路由通信

最近在做Android蓝牙通信,关于其中的UUID和配对密码很是不解,求高手指点

如何在 C# 桌面应用程序和移动(android)设备之间通过本地网络进行通信? [关闭]

Android:在 SPP 蓝牙设备之间切换

如何计算两个Android设备之间的距离? [关闭]