平台

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. 关于设置activity样式
  3. android:windowSoftInputMode属性使用
  4. Android(安卓)用Shell命令设置静态ip
  5. Android(安卓)程序获取、设置铃声、音量、静音、扬声器
  6. Android:实现一种浮动选择菜单的效果
  7. Android(安卓)网络链接状态 网络是否可用
  8. EditText的光标选择(android.text.Selection)&输入指定字符
  9. Android实现系统下拉栏的消息提示——Notification

随机推荐

  1. 禁掉安卓手机每次运行时都要安装 Unlock
  2. [转]Android中G-Sensor相关流程
  3. 如何解析android访问webservice返回的Soa
  4. 深入学习百度地图Android(安卓)SDK v4.0.
  5. [Android]关于Android(安卓)唯一设备号(r
  6. Android开发知识点总结
  7. Android开发常用调试技术记录
  8. Android(安卓)系统应用调用,intent的使用
  9. [置顶] cocos2d-x android 编译 iconv库
  10. ubuntu14.04 安装HAXM(KVM)提升android虚