以编程方式检查节电模式

我已经编写了一个应用程序(AutoWifiSwitch),如果启用了省电模式,我计划添加的其中一项function会自动禁用我的应用程序中的wifi扫描服务。

我知道Android L应该实现省电(以前HTC和三星会将这些function添加到软件中)。 据推测,现在这意味着Google将为其添加某种API。 理想情况下会添加一个新动作,所以我可以倾听。

我还想知道HTC / Samsung API是否可以实现上述function,如果是这样,我该如何使用它们。

我一直在寻找上述问题,但绝对没有运气,应用程序SecureSettings(Tasker的插件)能够挂钩到HTC / Samsung API无论如何都能实现节电,我不太清楚他们是怎么做的做到这一点。

编辑 :可以从Android L中的PowerManager获取省电值,但不确定是否有针对它的操作。

我最终想出了如何用HTC和三星设备做到这一点。 两者都将他们的电源管理器设置存储在Settings.System中。

HTC(Sense)使用密钥user_powersaver_enable 。 三星(Touchwiz)使用密钥psm_switch

两者都将布尔值存储为String,“0”为false,“1”为true。 然后,您可以使用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。

PowerManager powerManager =(PowerManager)getSystemService(Context.POWER_SERVICE); powerManager.isPowerSaveMode()

“省电模式”不是官方的AOSPfunction,也没有办法通过官方SDK检测它。 它是制造商特定的。 检查此链接

这个答案仅适用于三星节电模式,因为像往常一样,三星仍然选择使用标准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"));