背景
我有一个关于度假的应用程序的想法,需要与具有相同应用程序的其他手机通信。在度假期间,这些手机可能并非都有互联网,因为漫游可能非常昂贵。数据不是很多:像500 kB max就足够了(在json中)。
每部手机都有一些其他手机想知道的信息,但是如果它有助于将信息存储在1部手机上(从现在开始使用主手机),并在以后将其分享给其他手机互联网。
电话
Android,iPhone和Windows Phone 我们不能假设他们有NFC,IR或zigbee。只是硬件几乎每部手机都有蓝牙,相机,麦克风等。
我的想法
根据新信息更改的二维码:如果扫描第一部手机,第二部手机的QR码包含第一部手机及其自身的数据,第三部手机的数据来自第一部,第二部和第三部(本身)直到它到达保存所有数据的主电话。
我们无法听到(或我们可以)听到的数据传输声音。 Con是我不知道移动平台是否存在这样的东西,写它就像是一个3年的硕士论文项目。
所有这些想法都有很大的缺点。也许我忽略了一种更好的方式。
我会为问题添加一笔赏金以获得最佳解决方案 用一点代码引用解释它的答案(链接没问题)总是比以下更好:"使用bluetooth man"
答案 0 :(得分:12)
<强> TL; DR 强>
让多个设备相互连接的最简单(也是最受支持)方式是使用WiFi。由于您的目标是在没有互联网的情况下实现数据传输,因此最吸引人的解决方案是使用Peer-to-Peer网络结构。
两个主要的智能手机操作系统(Android和iOS)都有关于通过点对点网络创建和传输数据的API和文档。
这两种方法还可以加密正在传输的数据。
Windows似乎没有API允许多个对等连接,但他们的Proximity Class一次只能用于一个设备。
我可以在每个主要操作系统的不同选项上给出一些概述:
Android的P2P P2P(点对点)API是为了在没有互联网或其他网络的情况下传输数据而创建的。
从他们的文件:
Wi-Fi点对点(P2P)API允许应用程序连接到附近的设备,而无需连接到网络或热点(Android的Wi-Fi P2P框架符合Wi-Fi Direct ™认证计划)。 Wi-Fi P2P允许您的应用程序在超出蓝牙功能的范围内快速查找附近设备并与之交互。
Google甚至在此API上有Documentation和training。
Apple的Multipeer Connectivity。
非常类似于Android的P2P API,他们声称:
Multipeer Connectivity框架支持使用基础设施Wi-Fi网络,点对点Wi-Fi和蓝牙个人局域网发现附近iOS设备提供的服务,并随后通过发送基于消息的数据与这些服务进行通信,流数据和资源(如文件)。
使用Multipeer Connectivity时,这是一个不错的tutorial。
<强> - 编辑 - 强>
另一种iOS方式是使用GameKit
,这有点误用(?)工具。
然而,我认为为了你的目的让它工作可能会导致一些黑客,因为&#34;玩家&#34;必须使用游戏中心。
在Windows Phone中连接手机的唯一方法(显然)是使用Proximity,但这只能让您选择连接不超过两部手机。
他们说:
Proximity是在两个不同设备上运行的应用的两个实例之间创建共享应用体验的好方法。
这些是每个主要移动设备操作系统的选项。
应用程序用法可能类似于:
决定哪个设备将成为&#34; master&#34;,以便其他设备可以连接到它。在部署应用程序之前,不需要知道这一点,但应该有一种方法让用户决定他将成为客户端(接收数据)还是服务器(推送数据)。
一旦确定要推送数据的设备组,该设备必须注册为服务器(在Android P2P API中,您可以建立一个&#34;组所有者& #34;),然后通过初始化服务开始寻找对等体。
然后,一旦设备连接到主设备,您就可以开始推送数据了。另外一个好处是,当使用Android WiFi P2P时,所有通信都使用WPA2加密,而使用iOS,您可以使用MCEnableEncryption
启用加密(但是他们声称这会降低数据传输速率)。
现在您只需要选择一种方法,并确保所有手机都运行该操作系统。因为这三种连接方法不能一起工作。
列出的所有三种方法都是以编程方式完成的,因此用户不必做任何奇怪或奇怪的事情。搜索其他设备,连接和传输数据都可以在您的应用中完成。
如果问题缩小到特定问题,可以提供更多帮助,但这应该足以帮助您入门。
答案 1 :(得分:3)
不要尝试QR或声音。我认为传输500kb的数据会非常痛苦。 蓝牙似乎是一个很好的解决方案,但正如你已经说过的那样,很难配置。
您如何看待 wifi ? 至少每个Android和iPhone设备都可以创建一个移动wifi热点。通过使用此功能,您可以轻松设置8个设备位于同一LAN中的环境(不使用任何设备使用互联网)。
现在,您的“主电话”运行一个简单的服务器来同步数据(就像互联网服务器一样)。七个客户端中的每一个都可以通过扫描简单的二维码或发送短消息来接收您的主人的IP地址,然后相应地进行自我配置。
答案 2 :(得分:3)
答案 3 :(得分:2)
您可以在设备之间创建Wifi连接。连接后,它会在您的设备之间创建本地网络。当然,在这个网络中,您可以使用TCP / IP连接在您的设备之间进行交互。它适用于Android和iOS。只需将您的应用程序作为服务器放在一台设备上
修改强> 请注意,您必须使用任何网络连接设备。可以通过将设备初始化为WiFi路由器来连接设备。它可以是Android和iOS。如果可能,您可以将设备连接到任何WiFi连接。 然后,将您的应用程序作为Server-socket启动,其他人作为客户端启动。 对于Android(java)服务器使用此链接: https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html
try (
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
) {
用于Android设备客户端:
try (
Socket kkSocket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(kkSocket.getInputStream()));
)
同样的想法适用于iOS(Objective-C): 服务器 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/UsingSocketsandSocketStreams.html#//apple_ref/doc/uid/CH73-SW8
答案 4 :(得分:-1)
更好的方法是使用Ble。
您可以轻松连接手机,因为您不需要用户确认。
好像最多可以连接20台设备Maximum number of peripherals on CoreBluetooth?。
转移500KB应该需要几分钟(可能在2到5之间)。
答案 5 :(得分:-1)
您可以通过GPS跟踪没有互联网的Android设备。
没有互联网的连接:
SMS
USSD
DTMF(非常慢)
如何在USSD上设计跟踪设备 M2M IoT Cookbook
How to develop a device based on Wireless Wide Area Network modules
您还可以将Android手机用作数据记录器并存储在Micro SD卡下并通过以下方式读取卡片:
将SD卡更换为PC
通过蓝牙传输本地数据
通过Wi-Fi转发家中的数据
或者可能:
您的应用可以使用SMS API传输DATA或其他来源。