以编程方式 enable/disable "Battery Saver" 模式

Programmatically enable/disable "Battery Saver" mode

我正在尝试寻找是否可以以编程方式启用 and/or 禁用 Android 的内置 "Battery Saver" 模式。

欢迎任何官方方法或技巧。

作为参考,以下是如何按照 Android 5.0 中的标准 UI 执行此操作: http://www.androidcentral.com/android-50-lollipop-basics-how-get-more-life-between-charges-battery-saver

我知道你可以 detect 它 -- 这不是我想要的。

谢谢大家。

您可以在 root 设备上以编程方式enable/disable 省电模式。您必须在 /data/data/com.android.providers.settings/databases/settings.db 文件中编辑 global table 中的 low_power 值。

如果您的设备支持settings命令,您可以执行(作为root):

settings put global low_power 1

启用节能器和

settings put global low_power 0

禁用它。 如果没有,使用sqlite3命令:

sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update global set value='1' where name='low_power';"
sqlite3 /data/data/com.android.providers.settings/databases/settings.db "update global set value='0' where name='low_power';"

请记住,您必须先从 PC 上拔下 phone 插头,否则系统将禁用节能器。通过 WiFi 或 Android 终端(模拟器)使用 ADB。

更新:

sqlite3这个方法好像不靠谱了

我不确定 android.os.action.POWER_SAVE_MODE_CHANGED 广播是否被发送。也许您必须手动发送它,例如 here:

中的代码
private static String COMMAND_ENABLE = "settings put global low_power 1\n" +
        "am broadcast -a android.os.action.POWER_SAVE_MODE_CHANGED --ez mode true\n";
private static String COMMAND_DISABLE = "settings put global low_power 0\n" +
        "am broadcast -a android.os.action.POWER_SAVE_MODE_CHANGED --ez mode false\n";

此外,据报道在设置数据库中出现了一个新的 power_saving 条目,但是在 Android 6.0.1 中我还没有找到它。在 Android 7.1.1_r13 low_power 仍在内部使用(例如 here), however it may get changed in some Android release. You may want to keep checking changes in e.g. this and this file.

你不能不root你的phone。我不确定为什么会这样,特别是在 SdkVersion 23+ 之后现在需要位置服务来查看扫描结果的情况下。

这个问题很有启发性。 https://code.google.com/p/android/issues/detail?id=185370

最好的答案是应用程序开发人员被迫为他们的 google 霸主众包源网络位置。请注意,OS 本身在不打开位置服务的情况下显示扫描结果没有问题。

表明在定位服务处于非活动状态时,没有 GPS 就无法打开定位服务。这种两步随机播放是用户体验质量的主要问题。打开定位服务,然后关闭 GPS。

观看此 space,即将实施更多封锁。