可以找到附近的其他手机吗?

2022-09-03 14:14:57

我正在编写一个Android应用程序,我希望最终将其移植到iOS和Windows Mobile(尽管我现在对它们一无所知)。我希望我的应用程序能够在一定半径(可能是20-30英尺)内找到其他手机,这些手机也安装了游戏,以便用户可以在当前物理空间中与他人进行交互。这是否可能,如果是,如何实现?

我计划在需要互联网连接的应用程序上,所以我的第一个想法是使用像iOS查找其他附近设备(GPS位置)中描述的GPS,但这需要不断将数据传输到服务器,以使用带宽和电池更新用户的位置(更不用说服务器资源了)。GPS似乎也需要一段时间才能获得任何准确的定位,即使我不会存储历史数据,我也不会期望用户信任我提供这种私人信息(他们也不应该!

我知道有专有技术,例如索尼的NFC,但这太狭窄了,无法用于我希望与设备和操作系统无关的应用程序。还有哪些其他选择?假设用户愿意为应用提供适当的权限,那么还有哪些其他方法可以允许一台设备在10-15米的范围内找到另一台设备,这对于大型(百万+)用户群来说是实用的?HTML5地理位置是更好的途径吗?还是GPS是我唯一真正的选择?

我确实找到了 使用Android GPS来检测并连接其他手机,但希望过去几年已经开辟了更多的选择。

更新

感谢您到目前为止的所有回复。为了回答评论和答案中提出的一些问题,我想我会描述一下我期望应用程序/设备如何交互。

安装此应用程序的所有用户都将在后台运行一个代理,以更新其当前地理位置并侦听 ping。任何用户都可以打开完整的程序,并向附近的所有其他用户发送快速请求。如果我选择中央服务器路由,则服务器会使用附近用户名的列表来响应该请求。然后,用户可以选择其中之一来启动连接,在这种情况下,目标设备发出声音以通知连接请求。

从那里,处理两个设备之间的交互就足够容易了。找到附近的用户对我来说是症结所在。


答案 1

我可以看到的选项

  1. 蓝牙 (BT)。我不知道,如果我不是太怀疑它,但我看到了几个问题。短程。最大的能源消耗。最多7个对等节点同时连接(但也许这就足够了...)。最大的优点是很多设备都支持BT。

  2. BT LE(低能量)。好吧,它有助于能源消耗问题。但是,需要安卓4.3。

  3. WiFi Direct(又名P2P)。我试了一下,我有点失望。问题是它需要Android 4.0或更高版本。更糟糕的是,某些设备没有所需的硬件。我从三星Xperia Miro ST23i上的Android样品启动。点击“搜索”,我唯一得到的是一个吐司“启用WiFi P2P - 在你的设置中”。我点击了该设置中的所有内容,只有普通的WiFi和其他东西,没有提到Direct或P2P。Xperio Miro只是不支持WiFi Direct。WiFiDirectDemo

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

总结

有人比BT更有可能一直打开WiFi.BT也有一些时间限制,之后它被关闭(他们这样做可能会节省电池)。因此,WiFi似乎是比BT更好的选择。

如果WiFi Direct对您来说足够受欢迎 - 我会尝试一下。如果没有,选项4似乎是最好的。我知道这并不理想,但在这一点上,很难有更好的东西(我们仍然需要技术开发,WiFi Direct看起来很有前途)。


答案 2

我会使用中央服务器方法。每部电话都将位置数据发送到服务器。当其他用户处于范围内时,服务器会通知他们。要限制使用的数据,请仅在设备报告移动超过 X 米时发送位置。

另外,请考虑使用 Ping 按钮。当用户希望找到附近的人时,按下它以发送位置。位置数据将仅在此 ping 时发送。这将使用非常少的功率并提供良好的隐私。

可以检测到有关连接的Wifi接入点的详细信息。如果您可以获得AP或网关的MAC地址,则可以将其作为一种位置发送。同一网关上的所有玩家都将在附近。


推荐