设置中首选网络类型屏蔽2G/3G
flatform:rk3288 + android7.1
问题:
设置 > 更多 > 移动网络 > 首选网络类型 选项中, 因为过认证需要把2G/3G的选项屏蔽掉
代码跟踪:
1.布局文件:packages\services\Telephony\res\xml\network_setting.xml
<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" />
2.packages\services\Telephony\src\com\android\phone\MobileNetworkSettings.java
private static final String BUTTON_PREFERED_NETWORK_MODE = "preferred_network_mode_key";
@Override protected void onCreate(Bundle icicle) { addPreferencesFromResource(R.xml.network_setting); mButton4glte = (SwitchPreference)findPreference(BUTTON_4G_LTE_KEY); mButton4glte.setOnPreferenceChangeListener(this);
mButtonEnabledNetworks = (ListPreference) prefSet.findPreference( BUTTON_ENABLED_NETWORKS_KEY); }
这里主要实现的是,加载布局文件,按键的初始化。
找到找到这个listpreference的点击事件:
public boolean onPreferenceChange(Preference preference, Object objValue) { //Set the modem network mode mPhone.setPreferredNetworkType(modemNetworkMode, mHandler .obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
}
private class MyHandler extends Handler { static final int MESSAGE_SET_PREFERRED_NETWORK_TYPE = 0; @Override public void handleMessage(Message msg) { switch (msg.what) { case MESSAGE_SET_PREFERRED_NETWORK_TYPE: handleSetPreferredNetworkTypeResponse(msg); break; } } private void handleSetPreferredNetworkTypeResponse(Message msg) { if (isDestroyed()) { // Access preferences of activity only if it is not destroyed return; } AsyncResult ar = (AsyncResult) msg.obj; final int phoneSubId = mPhone.getSubId(); if (ar.exception == null) { int networkMode; if (getPreferenceScreen().findPreference(BUTTON_PREFERED_NETWORK_MODE) != null) { networkMode = Integer.parseInt(mButtonPreferredNetworkMode.getValue()); android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId, networkMode ); } if (getPreferenceScreen().findPreference(BUTTON_ENABLED_NETWORKS_KEY) != null) { networkMode = Integer.parseInt(mButtonEnabledNetworks.getValue()); android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(), android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId, networkMode ); } } else { if (DBG) { log("handleSetPreferredNetworkTypeResponse: exception in setting network mode."); } updatePreferredNetworkUIFromDb(); } } }
private void updatePreferredNetworkUIFromDb() { UpdateEnabledNetworksValueAndSummary(settingsNetworkMode); }
UpdateEnabledNetworksValueAndSummary就是2G/3G显示所在的地方,对应的屏蔽掉即可:
private void UpdateEnabledNetworksValueAndSummary(int NetworkMode) { switch (NetworkMode) { /* case Phone.NT_MODE_TDSCDMA_WCDMA: case Phone.NT_MODE_TDSCDMA_GSM_WCDMA: case Phone.NT_MODE_TDSCDMA_GSM: mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_TDSCDMA_GSM_WCDMA)); mButtonEnabledNetworks.setSummary(R.string.network_3G); break; case Phone.NT_MODE_WCDMA_ONLY: case Phone.NT_MODE_GSM_UMTS: case Phone.NT_MODE_WCDMA_PREF: if (!mIsGlobalCdma) { mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_WCDMA_PREF)); mButtonEnabledNetworks.setSummary(R.string.network_3G); } else { mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA)); mButtonEnabledNetworks.setSummary(R.string.network_global); } break; case Phone.NT_MODE_GSM_ONLY: if (!mIsGlobalCdma) { mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_GSM_ONLY)); mButtonEnabledNetworks.setSummary(R.string.network_2G); } else { mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA)); mButtonEnabledNetworks.setSummary(R.string.network_global); } break; case Phone.NT_MODE_LTE_GSM_WCDMA: if (isWorldMode()) { mButtonEnabledNetworks.setSummary( R.string.preferred_network_mode_lte_gsm_umts_summary); controlCdmaOptions(false); controlGsmOptions(true); break; } case Phone.NT_MODE_LTE_ONLY:*/ case Phone.NT_MODE_LTE_WCDMA: if (!mIsGlobalCdma) { mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_LTE_GSM_WCDMA)); mButtonEnabledNetworks.setSummary((mShow4GForLTE == true) ? R.string.network_4G : R.string.network_lte); } else { mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA)); mButtonEnabledNetworks.setSummary(R.string.network_global); } break; case Phone.NT_MODE_LTE_CDMA_AND_EVDO: if (isWorldMode()) { mButtonEnabledNetworks.setSummary( R.string.preferred_network_mode_lte_cdma_summary); controlCdmaOptions(true); controlGsmOptions(false); } else { mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_LTE_CDMA_AND_EVDO)); mButtonEnabledNetworks.setSummary(R.string.network_lte); } break; /* case Phone.NT_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA: mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA)); mButtonEnabledNetworks.setSummary(R.string.network_3G); break; case Phone.NT_MODE_CDMA: case Phone.NT_MODE_EVDO_NO_CDMA: case Phone.NT_MODE_GLOBAL: mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_CDMA)); mButtonEnabledNetworks.setSummary(R.string.network_3G); break; case Phone.NT_MODE_CDMA_NO_EVDO: mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_CDMA_NO_EVDO)); mButtonEnabledNetworks.setSummary(R.string.network_1x); break; case Phone.NT_MODE_TDSCDMA_ONLY: mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_TDSCDMA_ONLY)); mButtonEnabledNetworks.setSummary(R.string.network_3G); break; case Phone.NT_MODE_LTE_TDSCDMA_GSM: case Phone.NT_MODE_LTE_TDSCDMA_GSM_WCDMA: case Phone.NT_MODE_LTE_TDSCDMA: case Phone.NT_MODE_LTE_TDSCDMA_WCDMA: case Phone.NT_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:*/ case Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA: if (isSupportTdscdma()) { mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA)); mButtonEnabledNetworks.setSummary(R.string.network_lte); } else { if (isWorldMode()) { controlCdmaOptions(true); controlGsmOptions(false); } mButtonEnabledNetworks.setValue( Integer.toString(Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA)); if (mPhone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA || mIsGlobalCdma || isWorldMode()) { mButtonEnabledNetworks.setSummary(R.string.network_global); } else { mButtonEnabledNetworks.setSummary((mShow4GForLTE == true) ? R.string.network_4G : R.string.network_lte); } } break; default: String errMsg = "Invalid Network Mode (" + NetworkMode + "). Ignore."; loge(errMsg); mButtonEnabledNetworks.setSummary(errMsg); } }
参考:https://blog.csdn.net/ansondroider/article/details/90377725
https://blog.csdn.net/qq_37207639/article/details/102397812?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.pc_relevant_aa&spm=1001.2101.3001.4242.2&utm_relevant_index=4
分类:
network
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!