确定Android M中应用程序何时退出空闲模式

4
Android M有一个名为App Standby的新功能,当应用程序未被使用时,将其置于空闲状态(请参见docs),并且在其他情况下禁用其网络访问。
我似乎无法找到一种确定应用程序何时进入和退出此状态的方法(通过广播意图或类似物),但我的应用程序依赖于定期拥有网络以检查服务器状态。
有人可以帮助我找出如何确定我的应用程序何时进入和退出空闲状态吗?
我一直在查看M预览2源代码,并通过$ adb shell am set-inactive的调用进行了深入挖掘,看起来有一个AppIdleStateChangeListener,但它似乎仅在Android内部使用,而我们这些想知道何时可以使用互联网的开发人员无法使用 :-(

“不向我们这些想知道我们的应用程序何时可以使用互联网的低级开发人员公开”,如果您的代码正在运行,则不处于应用程序待机或Doze模式。换句话说,除了已经建立AlarmManagerJobScheduler工作,或设置为您通常侦听的其他广播之外,我不希望大多数应用程序需要在此处执行任何特殊操作。我有什么遗漏吗? - CommonsWare
@CommonsWare "如果你的代码正在运行,那么你不在应用待机或Doze模式下" -- 这是错误的。自己测试一下:让一个应用程序设置一个闹钟来发送网络请求,设置好闹钟后将应用程序置于空闲模式。当它响起时,网络请求将失败,表明该应用程序仍处于待机状态。文档说明应用程序不会进入/退出此模式的唯一时间是基于http://developer.android.com/preview/behavior-changes.html#behavior-power下列出的4个标准。 - Reuben Tanner
1
网络请求将失败,表明应用程序仍处于待机状态,或者由于其他原因没有网络连接。您的应用程序仍然需要处理这种情况。 - CommonsWare
请查看以下内容: https://dev59.com/810Z5IYBdhLWcg3wiwwv - Joanmi Bardera
@CommonsWare,你提出了一个很好的观点...无论应用待机如何,我都应该处理这种情况。谢谢+1 - Reuben Tanner
@JoanmiBardera,OP找到的解决方案处理设备空闲,这与应用程序待机是分开的。 - Reuben Tanner
1个回答

0
到目前为止,似乎当广播ACTION_POWER_CONNECTED时,所有应用程序都会退出待机模式...如果Google在发布之前不为我们公开一些东西,这是一个潜在的解决方法。

1
一旦收到android.os.action.DEVICE_IDLE_MODE_CHANGED的广播,请监听此操作。在获取此更改事件后,使用以下API检查设备空闲状态。 PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); boolean isDeviceIdle = pm.isDeviceIdleMode(); - Rupali
这是设备范围的空闲,而不是特定于应用程序的空闲。应用程序可以在设备不处于空闲状态时进入和退出空闲状态。 - Reuben Tanner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接