对于我的一个项目,我目前想要构建一个 Ionic 应用程序,以便为 iOS 和 Android 平台编写一次代码。我正在寻找一种方法来测量两个移动设备之间的距离。一个设备应放置在特定位置,而另一个设备应在进入第一个设备的范围(或更具体地说是第一个设备所在的位置)时被检测到。
位于特定位置的设备 1 将连接到互联网,访问该位置的设备 2 也将连接到互联网。
我已经阅读了很多不同的实现,但大多数时候它需要适用于 Android 或 iOS 的本机代码。
以下是我已经找到的解决方案:
我实际上已经没有主意了。实施应该使用 Javascript 来编写快速原型,因此选项是有限的。
我读过 StackExchange 上的一篇文章:Stack,但问题是没有描述实现。
换句话说,我希望签入系统知道设备 2 位于设备 1 的位置。即使在请求我们服务器的 API 之间进行交换,我们如何确保两个设备已关闭或至少已关闭设备 2 到达了特定位置?
为了给可能面临同样情况的人提供更多选择,我联系了在 Microsoft 工作的人以及一个名为 ThaliProject 的项目,您可以在 Google 上找到该项目,它是一个用于在移动设备之间进行通信的 PeerToPeer 库。但它不适合这个问题:
不幸的是,Thali 无法解决您的问题。 :( 我们依赖 Android 上的蓝牙 4.2 支持(因此我们既可以成为 BLE 中心,也可以成为 外围)。
如果您需要在设备之间工作,蓝牙也将无法工作 Android 和 iOS 设备,因为 Apple 使用专有的变体 蓝牙不起作用。
现在 BLE 可以在 Android 和 iOS 之间工作。虽然很多 Android 手机不能是外围设备,大多数都可以是中央设备。
不同的人正在尝试的另一种可能性是 声音。就像是 https://developers.google.com/nearby/messages/overview?hl=en。一个号码 的小组一直在尝试通过超声波进行局部发现 沟通。只需发送挑战并获得响应即可 超声波并且您已经证明设备 1 和 2 非常接近 彼此。
我偶然发现了一个名为:SonicNet.JS 的 JavaScript 库,它能够通过超声波发送数据和字符串,但实际上我很难让它在我的计算机上运行。这可能是一个解决方案并避免互操作性问题。
您可以使用Cordova 的蓝牙低功耗插件 (https://github.com/evothings/cordova-ble)。它主要适用于 Android 和 iOS。
当然,设备应该支持 BLE,但许多新智能手机都是如此。
您可以先使用
evothings.ble.startScan(success, error)
扫描周围,然后使用 RSSI
和 txPower
值来获取设备之间的距离。
来自 wifi 设备的 Time of Fly 怎么样?基本上,设备 A 上的应用程序需要发送信号。设备 B 接收它并返回带有签名的信号。设备A接收到它并根据时间流逝计算距离。
或者使用这里的API怎么样? https://indoor.here.com/#/。思路是gps+高精度地图。我知道您已经考虑过 GPS。但高清地图为您提供了一种验证设备接收到的 GPS 信息的方法,从而解决您的安全问题。