5.2 设置默认APN
Phone进程中的DcTracker构造方法如下,
1,调用父类DcTrackerBase的构造方法,
super(p);
DcTrackerBase的构造方法主要逻辑如下,
监听SIM卡的变化,
mUiccController = UiccController.getInstance();
mUiccController.registerForIccChanged(this, DctConstants.EVENT_ICC_CHANGED, null);
也就是说,如果SIM卡有变化, UiccController会向DcTrackerBase发送EVENT_ICC_CHANGED消息,
DcTrackerBase的handleMessage方法对该消息处理如下,
case DctConstants.EVENT_ICC_CHANGED: {
onUpdateIcc();
break;
}
会回调DcTracker的onUpdateIcc方法。
2,注册telephony.db数据库的变化,
mApnObserver = new ApnChangeObserver();
p.getContext().getContentResolver().registerContentObserver(
Telephony.Carriers.CONTENT_URI, true, mApnObserver);
ApnChangeObserver是DcTracker的内部类,定义如下,
private class ApnChangeObserver extends ContentObserver {
public ApnChangeObserver () {
super(mDataConnectionTracker);
}
@Override
public void onChange(boolean selfChange) {
sendMessage(obtainMessage(DctConstants.EVENT_APN_CHANGED));
}
}
而DcTrackerBase继承Handler,如下,
public abstract class DcTrackerBase extends Handler {
因此,一旦telephony.db数据库发生变化,会调用ApnChangeObserver 的onChange方法,然后调用Handler
的sendMessage方法发送EVENT_APN_CHANGED消息。DcTr