打瞌睡模式休眠 Google 的 Geofence 示例应用程序

Doze mode sleeps Google's Geofence sample application

我有一个使用地理围栏的 android 应用程序,但我很难克服打瞌睡模式。我的清单具有 WAKE_LOCK 权限,每个区域有七个 setNotificationResponsiveness 为 0。我什至将 PendingIntent 更改为 BroadcastReceiver,但随着智能手机屏幕的删除,该应用程序确实会休眠或死机。我已经尝试过使用 LocationRequest

LocationRequest.setFastestInterval(1000);
LocationRequest.setInterval(2000);

即便如此,我也没有成功。有没有人设法让应用程序 运行 打瞌睡?

我在“我的聊天”应用程序和“位置跟踪”应用程序中遇到了问题,在休眠模式下我们不会收到任何推送,或者我们不会收到任何网络连接或位置详细信息,并且大部分后台操作将被阻止,因为关于电池优化,我们可以通过两种方式解决。

  1. 优先推送消息(我在我的聊天应用中使用)-如果你发送普通推送,它不会到达应用程序,直到手机恢复正常,如果你发送优先推送,它将到达应用程序你可以在几秒钟内完成一些过程,但这也有一些限制。

  2. 前台服务,-对于您的情况,这是最好的解决方案,您应该有服务并且该服务应该 运行 作为前台服务,以便您可以随时获取位置信息即使在打瞌睡模式下。

WAKE_LOCK 清单中的权限不足以使用唤醒锁,您需要获取并释放代码中的锁,但从 Android 6 Doze 模式开始,它会进入深度睡觉也有获得性 wake_lock.

在打瞌睡模式下也适用于我的方式:

在 Main Activity onStop 中,我获取了一个部分唤醒锁并以 STARTFOREGROUND_ACTION 意图启动了一个服务,该服务调用了 startForeground 并显示了一个通知。

在 Activity onResume 上释放 WakeLock,服务以 STOPFOREGROUND_ACTION 意图停止,服务本身调用 stopForeground 和 stopSelf。

我最终让我的应用程序接收推送消息。显然该应用程序不再被操作系统杀死。