【问题标题】:Android - Detect if other users of my app are nearbyAndroid - 检测我的应用的其他用户是否在附近
【发布时间】:2019-03-18 13:12:16
【问题描述】:

我正在开发一款 Android 应用,该应用需要检测该应用的其他用户是否彼此靠近(比如说在同一个房间或蓝牙范围内)。应用需要能够检测到这一点无需任何用户交互

  • 地理位置不是一个选项,因为这在室内太不准确了。
  • 该应用程序只能在公司拥有的手机上运行,​​并且不会影响隐私。
  • 所有设备始终连接到同一个 wifi 网络,并且始终启用 BT。

我的想法是通过定期蓝牙扫描并对照包含所有安装了该应用程序的设备的 MAC 地址列表检查结果来检测用户是否彼此相距很近。 所有设备的 MAC 地址都发送到服务器,然后设备从服务器获取此 MAC 地址列表以与 BT 扫描的结果进行比较。

问题是,BT 和 Google 似乎使用广告/发现模式,其中一台设备充当服务器,一台设备充当客户端。为了使其正常工作,我觉得设备需要始终可被发现。

基于 Google 的 Nearby 或 BT 的实施能否满足我的需求?

是否可以在不被发现的情况下检测附近设备的存在?

由于电池寿命是一个问题(需要能够每天至少工作 8 小时),BLE 是一种选择吗?

【问题讨论】:

  • 看来您必须选择是希望设备始终可被发现,还是电池使用寿命长
  • 一种选择是在房屋周围放置蓝牙 LE 信标,让手机只扫描这些信标。然后手机不需要被发现或使用 BLE 广告。但随后需要有一个后端来跟踪哪些手机靠近哪些信标。 (手机会将此数据更新到后端。)

标签: android bluetooth bluetooth-lowenergy android-bluetooth


【解决方案1】:

如果手机没有真正用于其他用途,您几乎可以肯定每天可以处理 8 小时。然而,有很多变数。

许多旧手机需要使用无限重启扫描仪进行不同类型的扫描,才能正确报告“看到”外围设备。这会大大缩短电池寿命。

如果手机正在运行 Marshmallow 或更高版本,它们有打瞌睡模式会中断扫描。这可以使用 AlarmManager、JobService/Dispatcher 或 WorkManager 来规避。这会大大缩短电池寿命。

如果手机运行的是 Oreo 或更高版本,它们需要前台服务(持续通知)以防止应用程序被操作系统自动终止以节省电池电量。该应用程序还应该被列入电池优化白名单,因为即使使用前台服务,该应用程序仍会被操作系统杀死。

最后,使用定位服务扫描广播在电池方面是相当昂贵的。如果您尝试对手机进行集群并根据附近的其他手机来猜测它们的位置,那么在某种程度上,您仍然需要手机的位置数据来确定它们的位置。

你最好只扫描。您可以在公司财产上铺设信标,记录每个信标的位置。当手机“进入一个区域”(进入信标范围内)时,它应该向您的 api 发送一些信息,报告它刚刚找到了哪个信标。这会告诉你它在哪个房间/区域。

另一种不那么花哨(并且可能不太准确)的跟踪所有内容的方法是通过它们所连接的无线接入点的 IP 地址。使用WorkManager 定期更新具有电话唯一ID 和AP 的IP 地址的api。您的 IT 部门应该知道每个人的位置。通过这种方式,您可以获得相当好的跟踪效果,而且几乎不会消耗电池电量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多