Android系统APN配置详解

本文深入探讨了Android系统APN设置的实现细节,从Settings.apk的源码出发,解释了如何显示APN配置信息,包括在onCreate()和onResume()方法中的操作,以及如何通过ContentProvider从telephony.db数据库查询APN。此外,文章还介绍了如何使用OptionsMenu添加和编辑自定义APN配置,提到了ApnEditor Activity的角色。
摘要由CSDN通过智能技术生成

 Android 系统APN配置详解

       这些天一直在调系统原生的Settings.apk里面APN配置的问题,在设置里面手动增加了APN配置选项,但是在界面上还是看不到。所以跟了下代码,原以为就是简单的页面显示的问题,这一跟不要紧,一下就快追到HAL层去了(NND).

        首先看Settings.apk的源码,位于packages/apps/Settings/src/com/android/settings/目录下:首先找到ApnSettings类,继承于PreferenceActivity,并实现了Preference.OnPreferenceChangeListener接口。PreferencesActivity是Android中专门用来实现程序设置界面及参数存储的一个Activity,这里就不再赘述了。

      

public class ApnSettings extends PreferenceActivity implements
        Preference.OnPreferenceChangeListener {
	
	// 恢复出厂设置的URI
	public static final String RESTORE_CARRIERS_URI = "content://telephony/carriers/restore";
	// 普通URI,用于ContentPrivoder保存着APN配置信息
	public static final String PREFERRED_APN_URI = "content://telephony/carriers/preferapn";

	private static final Uri DEFAULTAPN_URI = Uri.parse(RESTORE_CARRIERS_URI);
	private static final Uri PREFERAPN_URI = Uri.parse(PREFERRED_APN_URI);
	
	// 两个句柄,用于恢复出厂设置
	private RestoreApnUiHandler mRestoreApnUiHandler;
	private RestoreApnProcessHandler mRestoreApnProcessHandler;
	
	private String mSelectedKey;
	
	// 组播接收的Intent过滤器
	private IntentFilter mMobileStateFilter;

	private final BroadcastReceiver mMobileStateReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
		    if (intent.getAction().equals(
			    TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) {
			Phone.DataState state = getMobileDataState(intent);
			switch (state) {
			case CONNECTED:
  			    if (!mRestoreDefaultApnMode) {
				fillList();
			    } else {
				showDialog(DIALOG_RESTORE_DEFAULTAPN);
			    }
			    break;
			}
		    }
		}
	};
	
	@Override
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		// 在activity创建的时候根据xml文件来配置视图,
		// 实际上 res/xml/apn_settings.xml这个文件就是一个空的PreferenceScreen
		addPreferencesFromResource(R.xml.apn_settings);
		getListView().setItemsCanFocus(true);	// 如果有List则获得焦点
		// 这个创建一个Inter 过滤器,过滤的动作为 ACTION_ANY_DATA_CONNECTION_STATE_CHANGED
		mMobileStateFilter = new IntentFilter(
                TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
	}
	
	@Override
	protec
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值