我已经编写了一个应用程序(AutoWifiSwitch),如果启用省电模式,我计划添加的其中一项功能会自动禁用我的应用程序中的wifi扫描服务。
我知道Android L应该实现省电(之前HTC和三星会将这些功能添加到软件中)。据推测,现在这意味着Google将为其添加某种API。理想情况下会添加一个新动作,所以我可以倾听。
我还想知道HTC / Samsung API是否可以实现上述功能,如果可以,我该如何使用它们。
我一直在寻找上述问题,但绝对没有运气,应用程序SecureSettings(Tasker的插件)能够挂钩到HTC / Samsung API,无论如何都能实现省电,我不太满意确定他们是如何做到的。
编辑:可以从Android L中的PowerManager获取省电值,但不确定是否有针对它的操作。
答案 0 :(得分:6)
我最终想出了如何使用HTC和三星设备做到这一点。两者都将他们的电源管理器设置存储在Settings.System中。
HTC(Sense)使用密钥user_powersaver_enable
。
三星(Touchwiz)使用密钥psm_switch
。
两者都将布尔值存储为字符串," 0"是虚假的" 1"是真的。然后,您可以使用ContentObserver监听更改(需要API级别16或更高级别):
getContentResolver().registerContentObserver(Settings.System.CONTENT_URI, true, new ContentObserver(){
@Override
public void onChange(boolean selfChange, Uri uri){
super.onChange(selfChange, uri);
String key = uri.getPath();
key = key.substring(key.lastIndexOf("/") + 1, key.length());
if (key.equals("user_powersaver_enable") || key.equals("psm_switch")){
boolean batterySaverEnabled = Settings.System.getString(getContentResolver(), key).equals("1");
// do something
}
}
});
然而,这只适用于Android L发布之前,当L发布时HTC和三星可能转移到AOSP电池保护程序,这意味着您将能够在L中使用新的电池保护程序api。
答案 1 :(得分:3)
PowerManager powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
boolean powerSaveMode = powerManager.isPowerSaveMode();
答案 2 :(得分:0)
"省电模式"不是官方的AOSP功能,也没有办法通过官方SDK检测它。它是制造商特定的。 check this link
答案 3 :(得分:0)
这个答案仅适用于三星节电模式,因为三星仍然会选择使用标准API。
iKeirNez发布了一个很好的答案,证实了我的怀疑。这仍然发生在您可以购买的具有5.1.1的低端设备上。我有一个列表,我知道这些设备在省电模式下遭受相机崩溃,但我还没有检查所有与省电模式相关的可能键。到目前为止,我知道这些:
内容://设置/系统/ powersaving_switch
内容://设置/系统/ psm_switch
您可以注册ContentResolver并聆听更改或,您可以在必要时进行检查:
final String result = Settings.System.getString(getContentResolver(), "psm_switch");
Log.v("Debug", "Powersaving active: " + TextUtils.equals(result, "1"));
答案 4 :(得分:0)
它不适用于我的Samsung S8,Android 9,而是我使用的:
$adb shell settings put global low_power 1
$adb shell settings get global low_power
...而且有效!
将其翻译成Java,如下所示:
final String result = Settings.Global.getString(getContentResolver(),"low_power");