gpt4 book ai didi

android - 是否可以跟踪应用何时进入 "Doze on the Go"(又名 Doze Light、Doze Extended 和 Doze 2)?

转载 作者:行者123 更新时间:2023-11-29 15:04:31 24 4
gpt4 key购买 nike

在 Android“N”中,Doze 已扩展为“Doze on the Go”。

我正在寻找一种方法来检测设备何时进入和离开这些新的轻度 sleep IDLE 和 IDLE_MAINTENANCE 状态。 (基本上与常规 Doze here 所问的相同问题。)

最佳答案

PowerManager 的联机文档没有提到它,但最新的源代码(API 24 修订版 1)看起来应该是这个问题的解决方案:

String ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED
= "android.os.action.LIGHT_DEVICE_IDLE_MODE_CHANGED"
boolean isLightDeviceIdleMode()

理论上,您可以简单地将一些代码注册为 Intent 的接收者并检查函数的当前值。对 dumpsys Activity 广播 的一些探索表明,当 light doze 状态发生变化时,确实会发送 Intent 。

但是,最新的 SDK 平台(API 24 修订版 2)中没有这些符号 - 我遇到了编译错误(还有一些 javapjar表明他们真的不存在)。联系 Google,我们被告知这是预期的设计。

有一种解决方法,即对上述相同的字符串进行硬编码,然后使用反射来调用本应在 API 中调用的相同函数。像这样:

/**
* Check if the device is currently in the Light IDLE mode.
*
* @param context The application context.
* @return True if the device is in the Light IDLE mode.
*/
public static boolean isLightDeviceIdleMode(final Context context) {
boolean result = false;
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm != null) {
// result = pm.isLightDeviceIdleMode();
try {
Log.d(TAG, "Trying reflection for isLightDeviceIdleMode");
Field pmServiceField = pm.getClass().getDeclaredField("mService");
pmServiceField.setAccessible(true);
Object pmService = pmServiceField.get(pm);

Method isLightDeviceIdleMode = pmService.getClass().getDeclaredMethod("isLightDeviceIdleMode");
isLightDeviceIdleMode.setAccessible(true);
result = (Boolean) isLightDeviceIdleMode.invoke(pmService);
} catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
Log.e(TAG, "Reflection failed for isLightDeviceIdleMode: " + e.toString());
} catch (RemoteException re) {
Log.e(TAG, "Remote exception checking isLightDeviceIdleMode: " + e.toString());
}
}
return result;
}

关于android - 是否可以跟踪应用何时进入 "Doze on the Go"(又名 Doze Light、Doze Extended 和 Doze 2)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39478974/

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