我的目标是以仅限BLE模式订阅Google Nearby Messages。虽然我的应用程序没有运行(在后台或手机重新启动后根本没有启动)我只想进行低功耗背景扫描。我只能在屏幕上的事件上进行扫描。
当应用程序处于活动状态时,我想进行前景扫描,对发现和丢失的信标进行快速反应,主要是通过距离估计。
我现在正在做的是在BroadcastReceiver中以后台(使用PendingIntent)订阅对“BOOT_COMPLETED”意图作出反应。当我的应用程序处于后台并且其他应用程序进行扫描时,我会收到一个意图。所以这部分有效。
现在当我的Activity启动时(onResume),我在前台模式下第二次订阅(使用MessageListener而不是PendingIntent)。我取消订阅onPause。我得到的更新速度非常快,包括距离估算。所以这也有效。
但解决方案存在一些问题。
- 当找到beacon时,onFound现在由PendingIntent和MessageListener调用。因此,性能方面的解决方案并不是很好。
- 当我在前台订阅时,我首先通过后台接收器收到onLost所有消息。在我通过背景和前景接收器接收onFound之后。取消订阅时也会出现同样的情况。导致丑陋的闪烁和较低的性能......
- 电池消耗量巨大。主要是在许多订阅/取消订阅周期之后。当电话完全没有使用时,我可以在晚上(大约10个小时)完全放电,从而进行背景扫描。电池消耗屏幕显示Google Play服务是最大的电池消费者(25%)。
醇>
问题:
- 应用程序未运行时,有更好的方法可以获得低功耗结果并在应用程序运行时执行活动前景扫描吗?
- 订阅如何运作?应用重启之间是否(背景和前景)持续存在?或者我应该订阅每个应用程序开始?如果我在没有取消订阅的情况下再次订阅会发生什么?
- 我看到附近对Activity的反应在日志文件中变为非活动状态。当Activity变为非活动状态时,前台订阅是否自动禁用?再次激活时会自动启用吗?或者只是使用大量电池而没有任何附加值?
醇>