平台

RK3399 + Android 8.1

问题:

设置 > 更多 > 移动网络 > 首选网络类型 选项中, 仅显示 3G和2G, 缺少LTE, 本身模块与SIM卡是支持LTE的.

相关代码:

|-- packages/services/Telephony/res/xml/network_setting_fragment.xml

<?xml version="1.0" encoding="utf-8"?><PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"        android:title="@string/mobile_networks">    <PreferenceScreen        android:key="cdma_lte_data_service_key"        android:title="@string/cdma_lte_data_service">    PreferenceScreen>    <com.android.phone.MobileDataPreference        android:key="mobile_data_enable"        android:title="@string/mobile_data_settings_title"        android:summary="@string/mobile_data_settings_summary"/>    <com.android.phone.RestrictedSwitchPreference        android:key="button_roaming_key"        android:title="@string/roaming"        android:persistent="false"        android:summaryOn="@string/roaming_enable"        android:summaryOff="@string/roaming_disable"/>    <com.android.phone.DataUsagePreference        android:key="data_usage_summary"        android:title="@string/data_usage_title" />    <com.android.phone.AdvancedOptionsPreference        android:key="advanced_options"/>    <SwitchPreference        android:key="enhanced_4g_lte"        android:title="@string/enhanced_4g_lte_mode_title"        android:persistent="false"        android:summary="@string/enhanced_4g_lte_mode_summary"/>    <ListPreference        android:key="preferred_network_mode_key"        android:title="@string/preferred_network_mode_title"        android:summary="@string/preferred_network_mode_summary"        android:entries="@array/preferred_network_mode_choices"        android:entryValues="@array/preferred_network_mode_values"        android:dialogTitle="@string/preferred_network_mode_dialogtitle" />    <ListPreference        android:key="enabled_networks_key"        android:title="@string/preferred_network_mode_title"        android:summary="@string/preferred_network_mode_summary"        android:entries="@array/enabled_networks_choices"        android:entryValues="@array/enabled_networks_values"        android:dialogTitle="@string/preferred_network_mode_dialogtitle" />    <Preference        android:key="carrier_settings_euicc_key"        android:title="@string/carrier_settings_euicc" />    <PreferenceCategory        android:key="calling"        android:title="@string/call_category">        <PreferenceScreen            android:key="wifi_calling_key"            android:title="@string/wifi_calling_settings_title">            <intent android:action="android.intent.action.MAIN"                    android:targetPackage="com.android.settings"                    android:targetClass="com.android.settings.Settings$WifiCallingSettingsActivity">                        <extra android:name="show_drawer_menu" android:value="true" />            intent>        PreferenceScreen>        <SwitchPreference            android:key="video_calling_key"            android:title="@string/video_calling_settings_title"            android:persistent="true"/>    PreferenceCategory>PreferenceScreen>

|-- packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java

public class MobileNetworkSettings extends Activity  {    public static class MobileNetworkFragment extends PreferenceFragment implements            Preference.OnPreferenceChangeListener, RoamingDialogFragment.RoamingDialogListener {        private static final String BUTTON_PREFERED_NETWORK_MODE = "preferred_network_mode_key";        @Override        public void onCreate(Bundle icicle) {            Log.i(LOG_TAG, "onCreate:+");            super.onCreate(icicle);...//添加设置项            addPreferencesFromResource(R.xml.network_setting_fragment);            mButtonPreferredNetworkMode = (ListPreference) prefSet.findPreference(                    BUTTON_PREFERED_NETWORK_MODE);}    private void updateBodyAdvancedFields(Activity activity, PreferenceScreen prefSet,                int phoneSubId, boolean hasActiveSubscriptions) {            boolean isLteOnCdma = mPhone.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;            if (DBG) {                log("updateBody: isLteOnCdma=" + isLteOnCdma + " phoneSubId=" + phoneSubId);            }            prefSet.addPreference(mButtonPreferredNetworkMode);            prefSet.addPreference(mButtonEnabledNetworks);            prefSet.addPreference(mButton4glte);            if (showEuiccSettings(getActivity())) {                prefSet.addPreference(mEuiccSettingsPref);                String spn = mTelephonyManager.getSimOperatorName();                if (TextUtils.isEmpty(spn)) {                    mEuiccSettingsPref.setSummary(null);                } else {                    mEuiccSettingsPref.setSummary(spn);                }            }            int settingsNetworkMode = android.provider.Settings.Global.getInt(                    mPhone.getContext().getContentResolver(),                    android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,                    preferredNetworkMode);            PersistableBundle carrierConfig =                    PhoneGlobals.getInstance().getCarrierConfigForSubId(mPhone.getSubId());            mIsGlobalCdma = isLteOnCdma                    && carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_CDMA_CHOICES_BOOL);            if (carrierConfig.getBoolean(                    CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL)) {                prefSet.removePreference(mButtonPreferredNetworkMode);                prefSet.removePreference(mButtonEnabledNetworks);                prefSet.removePreference(mLteDataServicePref);            } else if (carrierConfig.getBoolean(CarrierConfigManager                    .KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL)                    && !mPhone.getServiceState().getRoaming()                    && mPhone.getServiceState().getDataRegState()                    == ServiceState.STATE_IN_SERVICE) {                prefSet.removePreference(mButtonPreferredNetworkMode);                prefSet.removePreference(mButtonEnabledNetworks);                final int phoneType = mPhone.getPhoneType();                if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {                    updateCdmaOptions(this, prefSet, mPhone);                } else if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {                    updateGsmUmtsOptions(this, prefSet, phoneSubId, mNetworkQueryService);                } else {                    throw new IllegalStateException("Unexpected phone type: " + phoneType);                }                // Since pref is being hidden from user, set network mode to default                // in case it is currently something else. That is possible if user                // changed the setting while roaming and is now back to home network.                settingsNetworkMode = preferredNetworkMode;            } else if (carrierConfig.getBoolean(                    CarrierConfigManager.KEY_WORLD_PHONE_BOOL) == true) {                prefSet.removePreference(mButtonEnabledNetworks);                // set the listener for the mButtonPreferredNetworkMode list preference so we can issue                // change Preferred Network Mode.                mButtonPreferredNetworkMode.setOnPreferenceChangeListener(this);                updateCdmaOptions(this, prefSet, mPhone);                updateGsmUmtsOptions(this, prefSet, phoneSubId, mNetworkQueryService);            } else {                prefSet.removePreference(mButtonPreferredNetworkMode);                final int phoneType = mPhone.getPhoneType();                if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {                    int lteForced = android.provider.Settings.Global.getInt(                            mPhone.getContext().getContentResolver(),                            android.provider.Settings.Global.LTE_SERVICE_FORCED + mPhone.getSubId(),                            0);                    if (isLteOnCdma) {                        if (lteForced == 0) {                            mButtonEnabledNetworks.setEntries(                                    R.array.enabled_networks_cdma_choices);                            mButtonEnabledNetworks.setEntryValues(                                    R.array.enabled_networks_cdma_values);                        } else {                            switch (settingsNetworkMode) {                                case Phone.NT_MODE_CDMA:                                case Phone.NT_MODE_CDMA_NO_EVDO:                                case Phone.NT_MODE_EVDO_NO_CDMA:                                    mButtonEnabledNetworks.setEntries(                                            R.array.enabled_networks_cdma_no_lte_choices);                                    mButtonEnabledNetworks.setEntryValues(                                            R.array.enabled_networks_cdma_no_lte_values);                                    break;                                case Phone.NT_MODE_GLOBAL:                                case Phone.NT_MODE_LTE_CDMA_AND_EVDO:                                case Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA:                                case Phone.NT_MODE_LTE_ONLY:                                    mButtonEnabledNetworks.setEntries(                                            R.array.enabled_networks_cdma_only_lte_choices);                                    mButtonEnabledNetworks.setEntryValues(                                            R.array.enabled_networks_cdma_only_lte_values);                                    break;                                default:                                    mButtonEnabledNetworks.setEntries(                                            R.array.enabled_networks_cdma_choices);                                    mButtonEnabledNetworks.setEntryValues(                                            R.array.enabled_networks_cdma_values);                                    break;                            }                        }                    }                    updateCdmaOptions(this, prefSet, mPhone);                } else if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {                    if (isSupportTdscdma()) {                        mButtonEnabledNetworks.setEntries(                                R.array.enabled_networks_tdscdma_choices);                        mButtonEnabledNetworks.setEntryValues(                                R.array.enabled_networks_tdscdma_values);                    } else if (!carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)                            && !getResources().getBoolean(R.bool.config_enabled_lte)) {                        mButtonEnabledNetworks.setEntries(                                R.array.enabled_networks_except_gsm_lte_choices);                        mButtonEnabledNetworks.setEntryValues(                                R.array.enabled_networks_except_gsm_lte_values);                    } else if (!carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL)) {                        int select = (mShow4GForLTE == true) ?                                R.array.enabled_networks_except_gsm_4g_choices                                : R.array.enabled_networks_except_gsm_choices;                        mButtonEnabledNetworks.setEntries(select);                        mButtonEnabledNetworks.setEntryValues(                                R.array.enabled_networks_except_gsm_values);                    } else if (!getResources().getBoolean(R.bool.config_enabled_lte)) {//运行此分支                        mButtonEnabledNetworks.setEntries(                                R.array.enabled_networks_except_lte_choices);                        mButtonEnabledNetworks.setEntryValues(                                R.array.enabled_networks_except_lte_values);                    } else if (mIsGlobalCdma) {                        mButtonEnabledNetworks.setEntries(                                R.array.enabled_networks_cdma_choices);                        mButtonEnabledNetworks.setEntryValues(                                R.array.enabled_networks_cdma_values);                    } else {                        int select = (mShow4GForLTE == true) ? R.array.enabled_networks_4g_choices                                : R.array.enabled_networks_choices;                        mButtonEnabledNetworks.setEntries(select);                        mButtonEnabledNetworks.setEntryValues(                                R.array.enabled_networks_values);                    }                    updateGsmUmtsOptions(this, prefSet, phoneSubId, mNetworkQueryService);                } else {                    throw new IllegalStateException("Unexpected phone type: " + phoneType);                }                if (isWorldMode()) {                    mButtonEnabledNetworks.setEntries(                            R.array.preferred_network_mode_choices_world_mode);                    mButtonEnabledNetworks.setEntryValues(                            R.array.preferred_network_mode_values_world_mode);                }                mButtonEnabledNetworks.setOnPreferenceChangeListener(this);                if (DBG) log("settingsNetworkMode: " + settingsNetworkMode);            }

|-- packages/services/Telephony/res/values/strings.xml

    <string-array name="enabled_networks_except_lte_choices" translatable="false">        <item>@string/network_3Gitem>        <item>@string/network_2Gitem>    string-array>

config_enabled_lte的值为:
|-- packages/services/Telephony/res/values/config.xml

<bool name="config_enabled_lte" translatable="false">falsebool>

在以往的代码(以下为RK3288 Android7.1)中, 此值为true:
|-- device/rockchip/common/overlay/packages/services/Telephony/res/values/config.xml

<bool name="config_enabled_lte" translatable="false">truebool>

因此, 只需把 config_enabled_lte的值改为true即可显示出LTE.

更多相关文章

  1. Android判断是否有网络连接
  2. Android 网络链接状态 网络是否可用
  3. Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上
  4. Android使用okhttp框架实现带参数Get和Post请求(附服务端完整代码
  5. Android 网络监视器源码
  6. Android ListView 滚动条的设置详解及实例代码

随机推荐

  1. 消息推送
  2. Android(安卓)添加标签;角标;控件角落添加T
  3. Android下的数据储存方式
  4. 【Android(安卓)界面效果4】android背景
  5. Android面试-Android项目构建
  6. Android(安卓)项目的创建及工程目录的介
  7. AndroidMainifest标签使用说明1——<acti
  8. Android中的surfaceHolder.lockCanvas(nu
  9. 浅入浅出Android(010):如何将已有的sqlite数
  10. TabWidget