Android-检测我的应用程序的其他用户是否在附近

时间:2019-03-18 13:12:17

标签: android bluetooth bluetooth-lowenergy android-bluetooth

我正在开发一个Android应用程序,该应用程序需要检测该应用程序的其他用户是否彼此靠近(比如说在同一房间或蓝牙范围内)。该应用必须能够在没有任何用户交互的情况下检测到

  • 不能选择地理位置,因为这在室内太不准确了。
  • 该应用程序只能在公司自备的手机上运行,​​而该公司的手机应留在公司地面上,而隐私不是问题。
  • 所有设备始终连接到相同的wifi网络,并且始终启用BT。

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

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

基于Google的Nearest或BT的实施是否可以满足我的需求?

是否有可能发现附近的设备而不被发现?

由于电池寿命是一个问题(每天至少需要8小时才能做到),可以选择BLE吗?

1 个答案:

答案 0 :(得分:1)

如果电话没有真正用于其他用途,几乎可以确定您每天可以处理8个小时。但是,有很多变量。

许多较旧的电话需要使用无限次扫描程序重新启动进行不同类型的扫描,以便正确报告“看到”外围设备。这会大大缩短电池寿命。

如果电话运行的是棉花糖或更高版本,则它们的打ze模式会中断扫描。可以使用AlarmManager,JobService / Dispatcher或WorkManager规避此问题。这会大大缩短电池寿命。

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

最后,使用定位服务扫描广播在电池方面非常昂贵。如果您尝试对电话进行聚类并根据附近的其他电话来猜测其位置,则在某种程度上,您仍然需要电话中的位置数据来确定电话所在的位置。

您最好只扫描一下。您可以使用信标覆盖公司财产,并记录每个信标的位置。当手机“进入区域”(位于信标范围内)时,它应向api发送一些信息,报告刚刚找到的那个信标。这将告诉您它所在的房间/区域。

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