buildWaitingApns()的作用是在建立数据业务的时候选出能处理当前请求的apn去用作建立数据业务.
1.如果申请的是dun 类型的数据业务,那么就通过fetchDunApn()方法来获得对应的dun apn.
2.如果允许使用usePreferred作为候选apn可以通过下面的方式进行判断:
mPhone.getContext().getResources().getBoolean(com.android.internal.R.bool.config_dontPreferApn).
如果usePreferred是true,那么就通过mPreferredApn = getPreferredApn();获得prefered apn. 如当前的prferred apn有可以处理当前建立数据业务的type类型.如果prefered apn对应的mccmnc和当前卡IccRecords的mccmnc相同,那么就把preferred apn作为候选的apn.
3.如果1,2上述两点都不满足,那么就会mAllApnSettings数组里面选择出对应的apn作为候选apn. 候选的条件是mAllApnSetting中的apn能处理申请的apn的type ,同apn的radio Tech和申请时的mPhone.getServiceState().getRilDataRadioTechnology()的相同就行.
在这里可以做很多运行商的需求,比如说, 某中Tech只能对应某个apn。或者某些apn只能在漫游或者非漫游情况下使用,都可以在此做定制.