您的位置:首页 > 理论基础 > 计算机网络

android 手机链接3g网络的问题

2013-09-19 13:46 274 查看
国内使用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;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android bug 3g网络
相关文章推荐