我正在探索安卓m预览版1中的更改。具体来说,我想知道我是否可以通过编程检查我的应用程序是否在Doze和应用程序待机模式下被列入白名单。我基本上想要"adb shell dumpsys deviceidle"的结果。我试图通过getSystemServices获取android.os.IDeviceIdleController的实例,但它返回null。当我做"adb shell服务列表"时,我得到"56设备空闲:[android.os.IDeviceIdleController]"。如果我可以访问该实例,那么我可以使用java反射来访问公共方法是PowerSaveWhitelistApp(字符串名称)。
您需要有android.permission.DEVICE_POWER
(签名保护)才能调用该方法。参见源代码:
- https://android.googlesource.com/platform/frameworks/base/+/af8ff4f/services/core/java.com/android/server/DeviceIdleController.java#1160
- https://android.googlesource.com/platform/packages/apps/Settings/+/be59441/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java#106