Checking for Power Saver Mode programmatically

前端 未结 5 674
旧时难觅i
旧时难觅i 2020-12-01 21:44

I have written an app (AutoWifiSwitch) and one of the features I plan to add is automatically disabling the wifi scanning service in my app if power saving mode is enabled.<

5条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-01 22:12

    I've eventually figured out how to do this with HTC and Samsung devices. Both store their power manager settings in Settings.System.

    HTC (Sense) uses the key user_powersaver_enable. Samsung (Touchwiz) uses the key psm_switch.

    Both store the boolean as a String, "0" being false and "1" being true. You can then listen for changes using a ContentObserver like so (requires API level 16 or higher):

    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
        }
      }
    });
    

    However this will only be applicable until Android L is release, when L is released HTC and Samsung will likely move over to the AOSP battery saver which means you will be able to use the new battery saver api in L.

提交回复
热议问题