2017-07-17 23 views
-2

我目前正在开发一个android应用程序,以用户指定的时间间隔(5分钟,10分钟...)从Web服务器获取数据。我正在使用AlarmManager和WakeLock。警报每隔5-10分钟就会发生。虽然互联网连接似乎没有在睡眠期间工作。大多数人建议我使用WifiLock。纠正我,如果我错了,但不是WifiLock只用于保持WiFi活着? 3G-4G移动数据呢? WifiLock是否保持这种联系?在睡眠中使用互联网 - Android服务

+1

你有没有尝试使用服务?服务独立运行,即使应用程序关闭,也可以执行。 – UmarZaii

+0

这与我的问题无关。我的代码按预期执行。但是我没有互联网接入。我尝试下载一个文件,但它不起作用。 –

+0

检查了如何打开互联网即使手机处于睡眠模式.. [链接](https://stackoverflow.com/questions/11926640/turn-on-the-internet-on-android-when-睡眠中) – UmarZaii

回答

0

从Android 6开始,由于新的打盹模式,即使使用唤醒锁,设备也进入睡眠状态,因此将忽略它​​们。

避免设备进入睡眠状态的方法是使用不可忽视的通知启动前台服务。

+0

“避免设备进入睡眠的方式” 但我不想避免睡眠。我想让我的代码在睡眠中执行。哪些已经在做。它只是无法访问因特网,因为无线网络/网络在睡眠期间关闭。 –

+0

所以你可以让你的广播接收机开始一个前台服务,做数据传输?这会唤醒设备,然后在前台服务退出后再回到睡眠状态吗? –

+0

在睡眠期间手机完全停止,cpu停止执行,当Brodacast Receiver处理闹钟时,只有在onReceive返回之前,CPU才会处于活动状态。 –

0

当设备处于打盹模式时,您无法访问网络。如果您希望从Web服务接收通知或更新,请使用Firebase云消息传递,或者将网络通话延迟至下一次唤醒。你可以看到更多有关在这里打盹限制:

https://developer.android.com/training/monitoring-device-state/doze-standby.html#restrictions

另外,如果您想了解如何检查,如果手机处于打盹模式:

https://developer.android.com/reference/android/os/PowerManager.html#isDeviceIdleMode()

+0

我也尝试过实施前台服务。在“onCreate”方法中,我发出wakelock和wifilock。当设备休眠时,所有网络请求我的应用程序(前台服务)超时。另外,我尝试在<6.0设备上运行我的应用程序,这仍然会发生。所以我相信这与打盹模式无关。 –

+0

发布你的清单以及你用来做这个http调用的服务。另外,你是否在尝试运行请求的同时坚持一个唤醒锁? –