以编程方式检查节电模式

时间:2014-07-31 17:45:53

标签: java android api sdk

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

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

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

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

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

5 个答案:

答案 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");