Android 9.0 (P版本) MTK平臺原生的待機智慧省電功能
阿新 • • 發佈:2018-12-11
1. 原生介面UI
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));
}