1. 程式人生 > >Android 9.0 (P版本) MTK平臺原生的待機智慧省電功能

Android 9.0 (P版本) MTK平臺原生的待機智慧省電功能

1. 原生介面UI

待機智慧省電.png

2. 原始碼檢視

2.1 字串

Z:\9.1\vendor\mediatek\proprietary\packages\apps\MtkSettings_Eclipse\res_ext\values-zh-rCN\mtk_strings.xml

  <!-- Background power saving start -->
   <string name="bg_power_saving_title">待機智慧省電</string>
  <!-- Background power saving end -->
        

上述檢視,該功能屬於MTK的原生功能

2.2 字串所在的佈局介面

power_usage_summary.xml

    <!-- MTK background power saving -->
    <SwitchPreference
        android:key="background_power_saving"
        android:title="@string/bg_power_saving_title"/>

2.3 檢視介面的原始碼載入位置

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

package com.android.settings.fuelgauge;

/**
 * Displays a list of apps and subsystems that consume power, ordered by how much power was
 * consumed since the last time it was unplugged.
 */
public class PowerUsageSummary extends PowerUsageBase implements OnLongClickListener,
        BatteryTipPreferenceController.BatteryTipListener {
        
    @Override
    protected int getPreferenceScreenResId() {
        return R.xml.power_usage_summary;
    }
    
    @Override
    protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
        .....
        /// M: Add for Background power saving 新增了待機省電的選項
        controllers.add(new BackgroundPowerSavingPreferenceController(context));
        return controllers;
    }

2.4 BackgroundPowerSavingPreferenceController的邏輯實現

package com.mediatek.settings.fuelguage;

public class BackgroundPowerSavingPreferenceController extends AbstractPreferenceController
        implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
    
    private static final String KEY_BACKGROUND_POWER_SAVING = "background_power_saving";

    @Override
    public void updateState(Preference preference) {
        int backgroundPowerSavingState = Settings.System.getInt(mContext.getContentResolver(),
                BG_POWER_SAVING_ENABLE, 1);
        Log.d(TAG, "update background power saving state: " + backgroundPowerSavingState);
        ((SwitchPreference) preference).setChecked(backgroundPowerSavingState != 0);
    }

3. 總結

待機智慧省電,即MTK的對齊喚醒機制或稱同步喚醒,這裡不進行詳盡描述了,只作為程式碼移植確認

介面呼叫如下

    /**
     * sdk >= 26 com.mediatek.provider.MtkSettingsExt.System.BG_POWER_SAVING_ENABLE
     * vendor/mediatek/proprietary/frameworks/base/settingsprovider/java/com/mediatek/provider/MtkSettingsExt.java
     * sdk < 26 Settings.System.BG_POWER_SAVING_ENABLE
     */
    public final static String ACTION_MTK_BG_POWER_SAVE_MODE = "background_power_saving_enable";

    public static boolean isMTKBgPowerSave(Context mContext) {
        return Settings.System.getInt(mContext.getContentResolver(), ACTION_MTK_BG_POWER_SAVE_MODE, 0) == 1;
    }
    
    public static void setMTKBgPowerSave(Context mContext, boolean value) {

        Settings.System.putInt(mContext.getContentResolver(), ACTION_MTK_BG_POWER_SAVE_MODE, (value ? 1 : 0));
    }