1. UI 界面

2. 源码

2.1 界面位置

Z:\9.1\vendor\mediatek\proprietary\packages\apps\MtkSettings_Eclipse\res\xml\power_usage_summary.xml

    

从上面看,具体界面控制器在于 settings:controller=“com.android.settings.fuelgauge.BatterySaverController”,点击时调整在于android:fragment=“com.android.settings.fuelgauge.batterysaver.BatterySaverSettings”

2.2 查看 BatterySaverController.java

Z:\9.1\vendor\mediatek\proprietary\packages\apps\MtkSettings_Eclipse\src\com\android\settings\fuelgauge\BatterySaverController.java

主要处理选项框中的显示信息

package com.android.settings.fuelgauge;public class BatterySaverController extends BasePreferenceController        implements LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {            @Override    public CharSequence getSummary() {        final boolean isPowerSaveOn = mPowerManager.isPowerSaveMode();        final int percent = Settings.Global.getInt(mContext.getContentResolver(),                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);        if (isPowerSaveOn) {            return mContext.getString(R.string.battery_saver_on_summary);        } else if (percent != 0) {            return mContext.getString(R.string.battery_saver_off_scheduled_summary,                    Utils.formatPercentage(percent));        } else {            return mContext.getString(R.string.battery_saver_off_summary);        }    }        "开启"    "在电量降到 %1$s 时开启"    "关闭"

2.3 查看 BatterySaverSettings.java

package com.android.settings.fuelgauge.batterysaver;/** * Battery saver settings page */public class BatterySaverSettings extends DashboardFragment {    @Override    protected int getPreferenceScreenResId() {        return R.xml.battery_saver_settings;    }    

上述看BatterySaverButtonPreferenceController有逻辑处理

2.4 查看 BatterySaverButtonPreferenceController.java

核心方法 BatterySaverUtils.setPowerSaveMode

package com.android.settings.fuelgauge.batterysaver;import com.android.settingslib.fuelgauge.BatterySaverUtils;/** * Controller to update the battery saver button */public class BatterySaverButtonPreferenceController extends        TogglePreferenceController implements        LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {            @Override    public boolean setChecked(boolean stateOn) {        // This screen already shows a warning, so we don't need another warning.        return BatterySaverUtils.setPowerSaveMode(mContext, stateOn,                false /* needFirstTimeWarning */);    }

2.5 查看 BatterySaverUtils.setPowerSaveMode

frameworks/base/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java

package com.android.settingslib.fuelgauge;/** * Utilities related to battery saver. */public class BatterySaverUtils {    private static final String TAG = "BatterySaverUtils";            /**     * Enable / disable battery saver by user request.     * - If it's the first time and needFirstTimeWarning, show the first time dialog.     * - If it's 4th time through 8th time, show the schedule suggestion notification.     *     * @param enable true to disable battery saver.     *     * @return true if the request succeeded.     */    public static synchronized boolean setPowerSaveMode(Context context,            boolean enable, boolean needFirstTimeWarning) {        if (DEBUG) {            Log.d(TAG, "Battery saver turning " + (enable ? "ON" : "OFF"));        }        final ContentResolver cr = context.getContentResolver();        if (enable && needFirstTimeWarning && maybeShowBatterySaverConfirmation(context)) {            return false;        }        if (enable && !needFirstTimeWarning) {            setBatterySaverConfirmationAcknowledged(context);        }        if (context.getSystemService(PowerManager.class).setPowerSaveMode(enable)) {            if (enable) {                final int count =                        Secure.getInt(cr, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, 0) + 1;                Secure.putInt(cr, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, count);                final Parameters parameters = new Parameters(context);                if ((count >= parameters.startNth)                        && (count <= parameters.endNth)                        && Global.getInt(cr, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0) == 0                        && Secure.getInt(cr,                        Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, 0) == 0) {                    showAutoBatterySaverSuggestion(context);                }            }            return true;        }        return false;    }

这里有个熟悉的老接口 getSystemService(PowerManager.class).setPowerSaveMode(enable)

3. Google省电模式的接口

    public static boolean isGooglePowerSaveMode(Context mContext) {        PowerManager mPowerManager = ((PowerManager) mContext.getSystemService(Context.POWER_SERVICE));        return mPowerManager.isPowerSaveMode();    }        /**     * android.Manifest.permission.DEVICE_POWER     *     * @param mContext     * @param value     */    public static void setGooglePowerSaveMode(Context mContext, boolean value) {        PowerManager mPowerManager = ((PowerManager) mContext.getSystemService(Context.POWER_SERVICE));        mPowerManager.setPowerSaveMode(value);    }

更多相关文章

  1. Android的Master/Detail风格界面中实现自定义ListView的单选
  2. MVC浅析(实际上应该是MVP,有时间再更新该博客)
  3. 用Fiddler查看 Android/iOS 网络请求
  4. 在android 4.2.2上调试MU609步骤,WCDMA
  5. A33 android4.4增加上层有线网络设置接口及相关说明
  6. Android(安卓)HttpPost表单访问接口
  7. Android(安卓)SDK下载和更新失败的解决方法
  8. Android(安卓)侧滑菜单的实现
  9. Android音频架构概览

随机推荐

  1. 移动应用开发:如何创建自定义Android代码
  2. Android串口设备的应用实现方案以及与WEB
  3. Android 用代码动态添加View(ViewGroup.ad
  4. Android(安卓)Studio—— 关于在Android(
  5. Android特色开发之账户管理
  6. Android开发规范,性能优化
  7. 【译】Android主题动态切换开源库Prism基
  8. Android常用的数据结构
  9. 我和Android娘情缘
  10. Google计划开发开源WebKit内核Android浏