我正在编写一个Android应用程序,最终希望将其移植到iOS和Windows Mobile(尽管我现在对它们一无所知)。我希望我的应用能够找到一定半径内(可能是20到30英尺)的其他手机,这些手机也安装了游戏,以便用户可以在当前物理空间中与其他人互动。这可能吗?如果可以,怎么做?
我计划使用需要互联网连接的应用程序,因此我的第一个念头就是使用GPS,如iOS“查找其他附近的设备(GPS位置)”中所述,但这需要不断地将数据传输到服务器以使用带宽和电池来更新用户的位置(更不用说服务器资源了)。GPS似乎也需要一段时间才能获得任何准确的修复,即使我不会存储历史数据,我也不希望用户使用那种私人信息来信任我(同样,他们也不应该!)
我知道有专有技术,例如Sony的NFC,但是对于我想成为设备和操作系统不可知的应用程序来说,重点太狭窄了。还有什么其他选择?假设用户愿意为该应用程序授予适当的权限,那么还有哪些其他方法可以使一台设备在10-15米范围内找到附近的另一台设备(这对于大型(百万以上)用户群而言很实用)?HTML5地理位置更好吗?还是GPS是我唯一的选择?
我确实找到了使用AndroidGPS来检测其他手机并与之连接的工具,但我希望过去几年能提供更多选择。
更新
谢谢您到目前为止的所有答复。为了回答评论和答案中提出的一些问题,我想描述一下我期望应用程序/设备如何交互。
安装此应用程序的所有用户都将在后台运行代理,以更新其当前地理位置并侦听ping。任何用户都可以打开完整程序并向附近的所有其他用户发送快速请求。如果我走中央服务器路线,则服务器将使用附近的用户名列表响应该请求。然后,用户可以选择其中之一来启动连接,在这种情况下,目标设备会发出声音以通知连接请求。
从那里开始,很容易处理两个设备之间的交互。寻找附近的用户对我来说是难点。
蓝牙 (BT)。我不知道,如果我对此不太怀疑,但是我看到了几个问题。短距离。最大的能源消耗。最多可以同时连接7个对等节点(但也许足够……)。最大的优点是很多设备都支持BT。
BT LE (低能耗)。好的,它可以解决能耗问题。但是,需要Android 4.3。
WiFi Direct (又名P2P)。我试了一下,我有点失望。问题是它需要Android 4.0或更高版本。更糟糕的是,某些设备不需要硬件。我WiFiDirectDemo从三星Xperia Miro ST23i上的Android示例启动。点击“搜索”,我唯一得到的是一个吐司“在您的设置中启用WiFi P2P”。我单击了该设置中的所有内容,只有普通的WiFi和其他内容,没有提及Direct或P2P。Xperio Miro只是不支持WiFi Direct。
WiFiDirectDemo
通过互联网+设备地理位置与服务器的WiFi连接。 服务器保持用户的位置并回答诸如“谁在我的范围内20英尺?”之类的问题。问题可能是地理位置的准确性。如果墙壁很厚,或者您位于地球上很少有卫星的地方-这可能会非常不准确。
与BT相比,有人始终打开WiFi的可能性更大。BT也有一定的时间限制,在此之后将其关闭(通过这种方式可以节省电池)。因此,WiFi似乎比BT更好。
如果WiFi Direct对您来说足够受欢迎- 我会尝试一下。如果不是,选项4似乎是最好的。我知道这并不理想,但是在这一点上很难提供更好的东西(我们仍然需要技术开发,WiFi Direct看起来很有希望)。