国内使用3G网络的频段是BI频段,好像是2100吧
1、 屏幕点击过程:settings->more...->Mobile network->network mode
settings_headers.xml 是setting模块的布局文件,其中下面部分的代码对应的是settings中的more..选项:
<!-- Data Usage -->
<header
android:id="@+id/data_usage_settings"
android:fragment="com.android.settings.DataUsageSummary"
android:title="@string/data_usage_summary_title"
android:icon="@drawable/ic_settings_data_usage" />
<!-- Operator hook -->
<header
android:fragment="com.android.settings.WirelessSettings"
android:id="@+id/operator_settings">
<intent android:action="com.android.settings.OPERATOR_APPLICATION_SETTING" />
</header>
2、 点击more…以后进入Mobile network,对应的com.android.settings.WirelessSettings.java文件,发现加载:addPreferencesFromResource(R.xml.wireless_settings);
3、 通过wireless_settings.xml文件发现,说明启动了Phone模块的,MobileNetworkSettings.java文件:
<PreferenceScreen
android:key="mobile_network_settings"
android:title="@string/network_settings_title"
android:dependency="toggle_airplane">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.android.phone"
android:targetClass="com.android.phone.MobileNetworkSettings" />
</PreferenceScreen>
4、点击network mode时,通过 MobileNetworkSettings.java文件发现加载的phone/res/xml/gum_umts_options.xml,对比发现是里面的控件NetWork Mode控件:
5、通过gsm_umts_preferred_network_mode_key回到MobileNetworkSettings.java中找寻BUTTON_NETWORK_MODE_KEY.
private static final String BUTTON_NETWORK_MODE_KEY = "gsm_umts_preferred_network_mode_key";
6、找到语句,确定是对象mButtonPreferredNetworkMode:
mButtonPreferredNetworkMode = (ListPreference)prefSet.findPreference(BUTTON_NETWORK_MODE_KEY);
7、找到这个listpreference的点击事件:
publicboolean onPreferenceChange(Preference preference, Object objValue) {
if (preference == mButtonPreferredNetworkMode) {
然后执行里面的语句,设置联网模式:
mPhone.setPreferredNetworkType(modemNetworkMode, mHandler
.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
8、跟踪到framework层,找寻Phone.java文件,具体目录所在:frameworks\opt\telephony\src\java\com\android\internal\telephony。
发现Phone.java是一个接口,而被PhoneBase.java文件所实现,设置网络类型的函数。
public void setPreferredNetworkType(int networkType, Message response) {
mCM.setPreferredNetworkType(networkType, response);
}
其实实际上是public CommandsInterface mCM;接口实现的
protected PhoneBase(PhoneNotifier notifier, Context context, CommandsInterface ci,
boolean unitTestMode) {
this.mNotifier = notifier;
this.mContext = context;
mLooper = Looper.myLooper();
mCM = ci;}
9、再看看谁继承了他呢CDMAPhone.java:
public class CDMAPhone extends PhoneBase {
10、最后我在RIL.java文件中找到设置网络类型的地方:
@Override
public void setPhoneType(int phoneType) { // Called by CDMAPhone and GSMPhone constructor
if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType);
mPhoneType = phoneType;
}
国内使用3G网络的频段是BI频段,好像是2100吧
1、 屏幕点击过程:settings->more...->Mobile network->network mode
settings_headers.xml 是setting模块的布局文件,其中下面部分的代码对应的是settings中的more..选项:
<!-- Data Usage -->
<header
android:id="@+id/data_usage_settings"
android:fragment="com.android.settings.DataUsageSummary"
android:title="@string/data_usage_summary_title"
android:icon="@drawable/ic_settings_data_usage" />
<!-- Operator hook -->
<header
android:fragment="com.android.settings.WirelessSettings"
android:id="@+id/operator_settings">
<intent android:action="com.android.settings.OPERATOR_APPLICATION_SETTING" />
</header>
2、 点击more…以后进入Mobile network,对应的com.android.settings.WirelessSettings.java文件,发现加载:addPreferencesFromResource(R.xml.wireless_settings);
3、 通过wireless_settings.xml文件发现,说明启动了Phone模块的,MobileNetworkSettings.java文件:
<PreferenceScreen
android:key="mobile_network_settings"
android:title="@string/network_settings_title"
android:dependency="toggle_airplane">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.android.phone"
android:targetClass="com.android.phone.MobileNetworkSettings" />
</PreferenceScreen>
4、点击network mode时,通过 MobileNetworkSettings.java文件发现加载的phone/res/xml/gum_umts_options.xml,对比发现是里面的控件NetWork Mode控件:
5、通过gsm_umts_preferred_network_mode_key回到MobileNetworkSettings.java中找寻BUTTON_NETWORK_MODE_KEY.
private static final String BUTTON_NETWORK_MODE_KEY = "gsm_umts_preferred_network_mode_key";
6、找到语句,确定是对象mButtonPreferredNetworkMode:
mButtonPreferredNetworkMode = (ListPreference)prefSet.findPreference(BUTTON_NETWORK_MODE_KEY);
7、找到这个listpreference的点击事件:
publicboolean onPreferenceChange(Preference preference, Object objValue) {
if (preference == mButtonPreferredNetworkMode) {
然后执行里面的语句,设置联网模式:
mPhone.setPreferredNetworkType(modemNetworkMode, mHandler
.obtainMessage(MyHandler.MESSAGE_SET_PREFERRED_NETWORK_TYPE));
8、跟踪到framework层,找寻Phone.java文件,具体目录所在:frameworks\opt\telephony\src\java\com\android\internal\telephony。
发现Phone.java是一个接口,而被PhoneBase.java文件所实现,设置网络类型的函数。
public void setPreferredNetworkType(int networkType, Message response) {
mCM.setPreferredNetworkType(networkType, response);
}
其实实际上是public CommandsInterface mCM;接口实现的
protected PhoneBase(PhoneNotifier notifier, Context context, CommandsInterface ci,
boolean unitTestMode) {
this.mNotifier = notifier;
this.mContext = context;
mLooper = Looper.myLooper();
mCM = ci;}
9、再看看谁继承了他呢CDMAPhone.java:
public class CDMAPhone extends PhoneBase {
10、最后我在RIL.java文件中找到设置网络类型的地方:
@Override
public void setPhoneType(int phoneType) { // Called by CDMAPhone and GSMPhone constructor
if (RILJ_LOGD) riljLog("setPhoneType=" + phoneType + " old value=" + mPhoneType);
mPhoneType = phoneType;
}