有没有办法判断 Android 设备何时处于睡眠模式?测试我的应用程序时,我按下电源按钮关闭屏幕,并需要等到睡眠模式激活。然后,我使用 Google Cloud Messaging (GCM) 将消息发送到我的设备,然后在消息到达后播放声音和通知。但是,如果我在睡眠模式激活之前发送此消息,那么我不确定它是否收到消息是因为它仍然存在,还是因为我的服务例程由 GCM 广播接收器启动。
您可以使用
android.intent.action.SCREEN_OFF
Intent 找出屏幕何时关闭,但据我所知,没有 Intent 可以确定地找出设备是否处于睡眠模式。
没有确定的方法可以知道设备是否正在睡眠。但考虑到在睡眠模式下设备应该以最低频率运行并且 CPU 消耗应该最小,我们可以做出有根据的猜测。
要查找设备的当前频率,我们可以使用 adb shell 中的
cat /sys/devices/system/cpu/cpu0/cpufreq
并查找 cpu 使用情况,请查看此链接:获取 Android 中的内存使用情况
我不确定这些查询本身是否会唤醒设备。
您无法在应用程序级别分辨,因为当设备处于睡眠状态时,CPU 停止工作并且您的任何代码都不会执行。
您可以使用信息丰富的 dumpsys 命令来查找它。
这是一个单行 adb 命令:
adb shell 'if [ -z $(dumpsys power | grep mScreenOn=true) ]; then echo off; else echo ON; fi'
在我的 Chromecast HD 上,我可以做
dumpsys power | grep mWakefulness
它应该显示
mWakefulness=Asleep
或
mWakefulness=Awake