我稍微修改了这个应用程序:
https://github.com/commonsguy/cw-omnibus/tree/master/JobScheduler
它使用setExactAndAllowWhileIdle设置警报,并安排警报每1分钟关闭并记录它.
根据Doze文档,如果此应用程序在手机处于打盹模式时正在运行,则每15分钟只应关闭一个警报.我没有看到这种行为.
在运行Android M的nexus 5上启动应用程序和整个警报调度过程后,我使用提供的abd命令将手机放入Doze …
adb shell dumpsys电池拔掉
adb shell dumpsys deviceidle步骤
adb shell dumpsys deviceidle -h
…从日志中,我看到每分钟有大约30分钟的警报响起,最后它们相隔15分钟大约一个小时.然后回到每分钟一次,然后再回到15分钟.在测试期间,手机完全没有受到干扰.
有人知道为什么吗?我的印象是,在这些adb命令之后手机将立即处于打盹模式,并且警报将在距离开始15分钟后消失.
谢谢你的帮助.
最佳答案 首先,相关的adb命令文档是不完整的,正如您在
ISSUE 2930的链接中所述.
以下命令仅打印使用信息:
adb shell dumpsys deviceidle -h
以下命令将显示当前状态,包括进入IDLE的先决条件(启用,不移动,不充电,屏幕关闭):
adb shell dumpsys deviceidle
Settings:
...
Whitelist (except idle) system apps:
...
Whitelist (except idle) all app ids:
...
mEnabled=true
mForceIdle=false
mSigMotionSensor=null
mCurDisplay=...
mScreenOn=false
mCharging=false
mSigMotionActive=false
mState=INACTIVE
这表明您是否需要进行更多设置.例如.似乎在模拟器的电源按钮上需要2或3次点击才能获得mScreenOn = false.
以下命令逐步进入IDLE模式,但是ISSUE 2930解释了您需要多次执行以进入INACTIVE,IDLE_PENDING,SENSING,然后IDLE:
adb shell dumpsys deviceidle step
以下命令将强制它进入空闲状态:
adb shell dumpsys deviceidle force-idle
BTW最近在Doze and App Standby开发人员文档得到了改进.