我正在编写一个Android应用程序,我想最终移植到iOS和Windows Mobile(虽然我现在对它们一无所知)。我希望我的应用程序能够找到一定半径(可能是20-30英尺)内还安装了游戏的其他手机,以便用户可以在当前物理空间中与其他人进行交互。这是可能的,如果是的话,怎么样?
我计划在需要互联网连接的应用程序上,所以我的第一个想法是使用如iOS Find Other Nearby Devices (GPS locations)所述的GPS,但这需要不断地将数据传输到服务器以使用带宽和电池来更新用户的位置(更不用说服务器资源了)。 GPS也似乎需要一段时间来获得任何准确的修复,即使我不存储历史数据,我也不希望用户信任我的那种私人信息(他们不应该!) / p>
我知道有一些专有技术,比如索尼的NFC,但是这个应用程序的重点太过狭隘,我不想将它作为设备和操作系统无关的应用程序。还有哪些其他选择?假设用户愿意为应用程序提供适当的权限,那么还有哪些方法可以让一个设备在10-15米范围内找到另一个附近的设备,这对于大型(百万+)用户群来说是否实用? HTML5地理定位是更好的途径吗?或者GPS是唯一真正的选择吗?
我确实找到了Use Android GPS to detect and connect with other phones,但希望过去几年能够开辟更多选择。
更新
感谢您到目前为止的所有回复。为了回答评论和答案中提出的一些问题,我想我会描述我希望应用/设备如何互动。
安装此应用的所有用户都将在后台运行代理,以更新其当前的地理位置并监听ping。任何用户都可以打开完整的程序并向附近的所有其他用户发送快速请求。如果我转到中央服务器路由,则服务器会使用附近的用户名列表响应该请求。然后,用户可以选择其中一个来启动连接,在这种情况下,目标设备发出声音以通知连接请求。
从那里可以很容易地处理两个设备之间的交互。找到附近的用户对我来说是个难点。
答案 0 :(得分:12)
蓝牙(BT)。我不知道,如果我对此不太怀疑,但我看到了几个问题。短距离。能耗最大。最多7个对等体同时连接(但可能就足够了......)。最大的优势是很多设备都支持BT。
BT LE (低能耗)。好吧,它有助于消耗能源问题。但是,需要Android 4.3。
WiFi Direct (又称P2P)。我试了一下,我有点失望。问题是它需要Android 4.0或更高版本。更糟糕的是,某些设备没有所需的硬件。我在Samsung Xperia Miro ST23i的Android示例中发布了WiFiDirectDemo
。点击“搜索”,我唯一得到的是祝酒“启用WiFi P2P - 在您的设置中”。我点击了那个设置中的所有内容,只有普通的WiFi和其他东西,没有提到Direct或P2P。 Xperio Miro不支持WiFi Direct。
通过互联网+设备地理位置与服务器建立WiFi连接。服务器保留用户的位置,并回答诸如“我的距离是20英尺?”之类的问题。问题可能是地理定位的精确性。如果墙壁很厚或者你在地球上的卫星很少的地方 - 它可能非常不准确。
有人比BT更有可能开启WiFi。 BT也有一些时间限制,之后关闭(它们可以通过这种方式节省电池)。因此,WiFi似乎是比BT更好的选择。
如果WiFi Direct足够受欢迎 - 我会尝试一下。如果没有,选项4似乎是最好的。我知道,这并不理想,但在这一点上很难找到更好的东西(我们仍然需要技术开发,WiFi Direct看起来很有希望)。
答案 1 :(得分:4)
我会使用中央服务器方法。每部电话都将位置数据发送到服务器。服务器在范围内时通知其他用户。要限制使用的数据,仅在设备报告的移动超过X米时发送位置。
另外,请考虑使用Ping按钮。当用户希望在附近找到某人时,用户按下它以发送该位置。位置数据仅在此ping上发送。这将使用非常少的电力并提供良好的隐私。
可以检测有关连接的Wifi接入点的详细信息。如果您可以获得AP或Gateway的MAC地址,您可以将其作为一种位置发送。同一个网关上的所有玩家都在附近。