有没有可能找到附近的其他手机?

15
我正在开发一款Android应用程序,希望最终将其移植到iOS和Windows Mobile上(虽然我现在对它们一无所知)。我希望我的应用程序能够在一定半径内(可能是20-30英尺)找到已安装该游戏的其他手机,以便用户可以与当前物理空间中的其他人互动。这是否可能,如果是,怎么实现?
我计划让应用程序需要互联网连接,因此我的第一个想法是使用GPS,就像在iOS查找其他附近设备(GPS位置)中描述的那样,但这需要不断地传输数据到服务器,以使用带宽和电池更新用户的位置(更别说服务器资源了)。GPS似乎需要一段时间才能获得任何准确的修复,即使我不会存储历史数据,我也不会期望用户信任我处理那种私人信息(他们也不应该这样做!)
我知道有专有技术,例如索尼的NFC,但这对于我希望成为设备和操作系统不可知的应用程序来说,范围过窄了。还有什么其他选择?假设用户愿意授予应用程序适当的权限,还有哪些方法可以允许一个设备找到另一个附近的设备,范围在10-15米之内,适用于一个大型(百万级以上)用户群体?HTML5地理位置是更好的选择吗?还是GPS是唯一的选择?
我发现使用Android GPS检测和连接其他手机,但希望过去几年开放了更多选项。
更新
感谢迄今为止所有的回复。为了回答评论和答案中提出的一些问题,我想描述一下我希望应用程序/设备如何互动。

所有安装此应用的用户都将在后台运行一个代理程序,以更新其当前地理位置并监听脉冲。任何用户都可以打开完整的程序,并发送一个快速请求来查找附近的其他用户。如果我走中央服务器路线,那么服务器将响应该请求,并提供附近用户名的列表。然后,用户可以选择其中一个进行连接,这时目标设备会发出声音以通知连接请求。

从那里开始,处理两个设备之间的交互就相对容易了。对我来说,找到附近的用户是一个难点。


1
如果你想支持Android 4.3+,可以看一下蓝牙低功耗。再加上iBeacon的设置,每个运行你的应用程序的手机都可以将其位置广播给周围的人。 - panini
我在考虑使用高频脉冲来检测附近的人。 - Robert Beltran
交互的程度是多少? - PearsonArtPhoto
这里有一个类似的线程,除了没有给出答案外,它还包含了一些有趣的信息https://stackoverflow.com/questions/51407316/discover-nearby-smartphone-devices-on-android - Ignacio Tomas Crespo
2个回答

14

我能看到的选择

  1. 蓝牙 (BT)。我有些怀疑,但它存在几个问题。覆盖范围短,耗电量大,最多只能同时连接7个设备(但也许足够了...)。优点是许多设备都支持BT。

  2. BT LE (低功耗蓝牙)。它可以解决能量消耗问题,但需要Android 4.3以上版本。

  3. WiFi Direct (也称P2P)。我尝试过,但有点失望。问题在于它需要Android 4.0或更高版本,并且一些设备没有必要的硬件。我在三星Xperia Miro ST23i上启动了Android示例中的WiFiDirectDemo,点击“搜索”后,我只收到一个toast信息:“在设置中启用WiFi P2P”。我在设置中点击了所有选项,只看到普通的WiFi和其他选项,没有提及Direct或P2P。Xperio Miro就是不支持WiFi Direct。

  4. 通过互联网与服务器建立WiFi连接+设备地理位置。服务器保留用户位置并回答类似“谁在我范围内20英尺之内”的问题。问题可能在于地理定位的精度。如果墙壁很厚或者你在地球上某些卫星较少的地方,它可能非常不准确。

总结

有更大的可能性是某人会一直打开WiFi而不是BT。 BT也有一些时间限制,在一段时间后会关闭(他们这样做可能是为了节省电池电量)。因此,WiFi似乎比BT更好的选择。

如果WiFi Direct足够受欢迎,那我会尝试一下。如果没有,选项4似乎是最好的选择。我知道它不完美,但目前很难想出更好的解决方案(我们还需要技术发展,WiFi Direct看起来很有前途)。


对于选项4,IOS至少会通过WiFi接入点地理定位来补充GPS。人口最多的位置中,GPS信号较差的是城市峡谷和建筑内部,而它们往往有WiFi接入点。 - Patricia Shanahan
1
Android也可以通过WiFi和基站获取您的位置。 - PearsonArtPhoto
谢谢您的回复。在Webview中,HTML5地理定位是否是最可靠的方式来实现第4点?我以前从未在应用程序中使用过GPS;它有多快,多准确? - Nicholas
@Nicholas 不用谢。这很大程度上取决于情况 - 你应该测试一下,看看它的效果如何。 - Adam Stelmaszczyk
@AdamStelmaszczyk 我一定会进行测试,但如果我处于最佳区域,我可能会过于自信其性能,而如果我处于次优区域,我可能会过于悲观。因此,我希望将他人的经验纳入我的评估中。 - Nicholas

4
我会采用集中服务器方法。每个手机向服务器发送位置数据。当用户在范围内时,服务器会通知其他用户。为了限制使用的数据量,只有在设备报告移动超过X米时才发送位置。
另外,考虑使用Ping按钮。用户按下它以发送位置,当他们想找到附近的人时。这种方式只在Ping时发送位置数据。这将使用非常少的电力并提供良好的隐私保护。
可能可以检测连接的Wifi接入点的详细信息。如果您能获取AP或Gateway的MAC地址,您可以将其作为一种位置发送。所有处于同一Gateway上的玩家都会很近。

有没有关于如何在这个中央服务器上实现算法的想法?比如说,它是一个MySQL服务器,其中包含一个位置表格,显示所有用户最后更新的位置。或者更好的是,是否已经有现成的解决方案? - Jethro

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