android6.0设置

编程入门 行业动态 更新时间:2024-10-28 08:19:15

android6.0设置

android6.0设置

                                              MTK Android6.0设置中的智能省电默认关闭

        对于大多部分的setting中的配置信息,在default.xml文件中都有配置,但是也有一些设置中的配置信息在配置文件中没有的,所以就需要各位在源码中找到代码所处的位置,进行判断分析是否关闭或者打开。所以,就有了今天的博文。

       以下是MTK Android6.0中的源码信息,高通、瑞芯微等源码仅供参考:

1、源码位置:alps\packages\apps\Settings\src\com\mediatek\settings\fuelgauge\PowerUsageExts.java

    // init power usage extends items   按钮初始化的分析public void initPowerUsageExtItems() {// background power savingif (FeatureOption.MTK_BG_POWER_SAVING_SUPPORT&& FeatureOption.MTK_BG_POWER_SAVING_UI_SUPPORT) {mBgPowerSavingPrf = new SwitchPreference(mContext);mBgPowerSavingPrf.setKey(KEY_BACKGROUND_POWER_SAVING);mBgPowerSavingPrf.setTitle(R.string.bg_power_saving_title);mBgPowerSavingPrf.setOrder(PREFERENCE_ORDER_FIRST);mBgPowerSavingPrf.setChecked(Settings.System.getInt(mContext.getContentResolver(),Settings.System.BG_POWER_SAVING_ENABLE, 0) != 1);  //modified BG_POWER_SAVING_ENABLE Off by default mPowerUsageScreen.addPreference(mBgPowerSavingPrf);}}// on click  待机智能省电小按钮的响应事件public boolean onPowerUsageExtItemsClick(PreferenceScreen preferenceScreen,Preference preference) {if (KEY_BACKGROUND_POWER_SAVING.equals(preference.getKey())) {if (preference instanceof SwitchPreference) {SwitchPreference pref = (SwitchPreference) preference;int bgState = pref.isChecked() ? 1 : 0;Log.d(TAG, "background power saving state: " + bgState);Settings.System.putInt(mContext.getContentResolver(),Settings.System.BG_POWER_SAVING_ENABLE, bgState);if (mBgPowerSavingPrf != null) {mBgPowerSavingPrf.setChecked(pref.isChecked());}}// If user click on PowerSaving preference just return herereturn true;}return false;}

       到此,Settings中的电池->待机智能省电就可以自行改写了。

2、由于最近碰机器灭屏断网的问题,经过APP以及系统调试判断时智能待机省电打开的原因。但是,在这个问题上我是默认把待机智能省电关闭的了,并且经过测试部门测试某些特定功能也是通过的,怎么还是打开的呢?于是再次跟踪源码分析了一下,上面对于某些软件来说可能只是UI层面的显示关闭,并没有真正的关闭智能省电。特此纠正一下上面分析流程和总结结果:

首先,在以前的分析代码中,initPowerUsageExtItems()这个初始化方法,是在刚开机的时候设置UI开关按钮的状态是on还是off;如若想要改变UI按钮的状态就要onPowerUsageExtItemsClick()这个方法点击响应事件,但是根据他的响应具体是设置1或者0两个值;

                int bgState = pref.isChecked() ? 1 : 0;Log.d(TAG, "background power saving state: " + bgState);Settings.System.putInt(mContext.getContentResolver(),Settings.System.BG_POWER_SAVING_ENABLE, bgState);//通过这里写入值

通过字段BG_POWER_SAVING_ENABLE再grep源码

在,frameworks/base/services/core/java/com/mediatek/datashaping/DataShapingServiceImpl.java文件中又做了处理(设置以及开始改变功能的实现):

    public void start() {mGateOpenState = new GateOpenState(this, mContext);mGateOpenLockedState = new GateOpenLockedState(this, mContext);mGateCloseState = new GateCloseState(this, mContext);setCurrentState(DATA_SHAPING_STATE_OPEN_LOCKED);Slog.d(TAG, "start check user preference");mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.BG_POWER_SAVING_ENABLE), true,mSettingsObserver);mSettingsObserver.onChange(false);}
    public boolean openLteDataUpLinkGate(boolean isForce) {if (!mDataShapingEnabled) {Slog.d(TAG, "[openLteDataUpLinkGate] DataShaping is Disabled!");return false;}boolean powerSavingEnabled = 0 != Settings.System.getInt(mContext.getContentResolver(), Settings.System.BG_POWER_SAVING_ENABLE, 0);/// M: AlarmGrouping & DataShaping Testing Config to force Enable or Disable Feature. @{if ("0".equals(SystemProperties.get("persist.alarmgroup.enable", "-1"))) {powerSavingEnabled = false;Slog.d(TAG, "[openLteDataUpLinkGate] persist.alarmgroup.enable is false");} else if ("1".equals(SystemProperties.get("persist.alarmgroup.enable", "-1"))) {powerSavingEnabled = true;Slog.d(TAG, "[openLteDataUpLinkGate] persist.alarmgroup.enable is true");}/// M: AlarmGrouping & DataShaping Testing Config to force Enable or Disable Feature. @}if (powerSavingEnabled) {if (System.currentTimeMillis() - mLastAlarmTriggerSuccessTime>= ALARM_MANAGER_OPEN_GATE_INTERVAL) {if (mDataShapingHandler != null) {mDataShapingHandler.sendEmptyMessage(MSG_ALARM_MANAGER_TRIGGER);}mLastAlarmTriggerSuccessTime = System.currentTimeMillis();Slog.d(TAG, "Alarm manager openLteDataUpLinkGate: true");return true;} else {Slog.d(TAG, "Alarm manager openLteDataUpLinkGate: false");return false;}} else {Slog.d(TAG, "[openLteDataUpLinkGate] powerSaving is Disabled!");return false;}}
    private ContentObserver mSettingsObserver = new ContentObserver(new Handler()) {public void onChange(boolean selfChange) {boolean dataShapingEnabled = 0 != Settings.System.getInt(mContext.getContentResolver(), Settings.System.BG_POWER_SAVING_ENABLE, 0);....
}

frameworks/base/packages/SettingsProvider/src/com/mediatek/providers/utils/ProvidersUtils.java,通过这个文件就可看出framework设置的具体值,

        loadIntegerSetting(stmt, Settings.System.BG_POWER_SAVING_ENABLE,R.integer.def_bg_power_saving);

但是这个是由R.integer.def_bg_power_saving供值,所以追踪到:

frameworks\base\packages\SettingsProvider\res\values\mtk_defaults.xml中的 以下字段

<integer name="def_bg_power_saving">1</integer><!-设置对应的值,选择0关闭或者1开启-->

更多推荐

android6.0设置

本文发布于:2024-03-08 22:24:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722632.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!