gpt4 book ai didi

android - 如果应用程序在后台运行,则丢失网络 android 6 及更高版本

转载 作者:搜寻专家 更新时间:2023-11-01 09:35:26 24 4
gpt4 key购买 nike

我正在运行服务后台以使用 AlaramManager (setExactAndAllowWhileIdle) 以一定间隔执行一些任务。如果它连接了充电器,它就会运行。但是,如果它在一段时间后拔掉设备电源,我就会失去我的应用程序的网络。

Alaram 正在唤醒服务,即使设备处于空闲状态。但我的应用程序没有网络。

根据 https://developer.android.com/training/monitoring-device-state/doze-standby.html#它在电话空闲时限制网络。我在应用电话空闲时进行了相同的测试($ adb shell dumpsys battery unplug)

但是即使手机处于空闲模式,是否有可能让网络访问我的应用程序。

应用程序不是游戏商店。非常适合推荐。

最佳答案

我在您运行的服务中使用了 PowerManager.isDeviceIdleMode() 来检测您是否处于打瞌睡状态,如果是,只需调用 setAlarmClock() 方法,时间为 250 毫秒(例如)和随机广播只是为了唤醒设备,它会完全从瞌睡中醒来,从而像往常一样获得网络访问权限。不利的一面是你失去了打瞌睡带来的电池节省.. :D 如果它在你的情况下确实有用,请将其标记为有用。一旦你的服务(使用 setExactAndAllowWhileIdle() 设置)你可以去:

private boolean isDeviceInDozeMode() {
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
return pm.isDeviceIdleMode();

现在您知道自己是否处于打瞌睡状态。

然后您可以设置 AlarmClock 并使用 setAlarmClock(AlarmClockInfo a, PendingIntent p)

并且您可以通过正常的网络访问摆脱打瞌睡。

注意:请记住,使用 setExactAndAllowWhileIdle 并不意味着您的闹钟会在指定时间响起,它会比普通的 set() 方法响得更快,但不准确(正如方法名称所暗示的那样)。一般来说,我的方式在调度方面并不完美,但一旦在设备上检测到它,它就会以编程方式退出 DOZE。

如果您需要更多更新,请告诉我。

关于android - 如果应用程序在后台运行,则丢失网络 android 6 及更高版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43644325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com