區別於前面的緊急apn,這裡的apn引數主要指常規的sim卡apn引數,手機在上網時必須傳遞正確的apn引數給運營商才可以接入流動網路,而常規apn引數的建立是由***觸發的。
前面在dctracker初始化過程中註冊了大量***,其中有兩個***可以觸發apn的建立過程:1、sim載入完畢;2、apn改變。這兩個事件所導致的apn建立流程也都是類似的,分別是:
【當sim載入完畢時】,將會觸發onrecordsloaded():
private void onrecordsloaded()
//嘗試發起資料業務
setupdataonconnectableapns(phone.reason_sim_loaded);
}
【當apn改變時】,將會觸發onapnchanged():
private void onapnchanged()
//建立apn引數
createallapnlist();
setinitialattachapn();
//清除舊的連線
cleanupallconnections(!isdisconnected, phone.reason_apn_changed);
//嘗試發起資料業務
setupdataonconnectableapns(phone.reason_apn_changed);
}
從上面兩個過程對比我們發現,他們都通過兩個步驟進行apn的建立,分別是createallapnlist()和setinitialattachapn(),他們的作用分別是建立apn和設定預設apn。
下面分別來介紹這個過程。
建立apn是通過createallapnlist()來完成的。
private void createallapnlist()
cursor.close();}}
//新增緊急apn
addemergencyapnsetting();
//合併類似的apn
dedupeapnsettings();
if (mallapnsettings.isempty()) else
}setdataprofilesasneeded();
}
這個方法主要經歷了三個步驟:
1、建立乙個apn的列表,其中包含:當前sim對應的apn、緊急apn;
2、合併相同的apn;
3、尋找乙個當前prefer的apn引數;
前面介紹過,在telephonyprovider初始化過程中從"etc/apns-conf.xml"配置檔案中載入了預置的apn引數存入資料庫,而現在需要根據當前sim資訊把匹配的apn讀取出來。
而讀取過程就是先獲取當前sim的plmn,然後建立資料庫查詢條件"numeric = 當前sim plmn",然後通過createapnlist()方法將資料庫查到的資訊建立為apn引數。
接下來又經歷了一次新增緊急apn的過程,這個過程和前面初始化dctracker時新增緊急apn過程完全一致。
然後就需要通過dedupeapnsettings()方法去掉apn列表中重複的apn引數:
private void dedupeapnsettings() else
}i++;
}}
這裡就乙個去重的演算法問題,這個演算法的原理就是,經過乙個迴圈,可以找到某個引數所有相同的組合。
再然後就需要從當前眾多的apn引數中尋找乙個當前合適的(prefer)apn引數,該apn要求其對應的plmn屬於當前的sim。他的**是跟隨其他預置的apn一起被新增到資料庫中的,其特別之處就在於多了「preferapn_no_update」的屬性。他的作用就是作為備用apn來發起資料連線。
private apnsetting getpreferredapn()
cursor cursor = mphone.getcontext().getcontentresolver().query( preferapn_no_update_uri, new string ,
null, null, telephony.carriers.default_sort_order);
if (cursor != null) else
if (mcansetpreferapn && cursor.getcount() > 0) }}
if (cursor != null)
return null;
}
從其獲取途徑可以看到,他的uri("content://telephony/carriers/preferapn_no_update")中多了"preferapn_no_update"的引數,這也是該apn的特殊之處。
經過前面的過程,apn的各項引數都已經準備就緒,接下來就是通過setinitialattachapn()方法向modem設定attach預設apn過程。
protected void setinitialattachapn() else if ((defaultapnsetting == null) && (apn.canhandletype(phoneconstants.apn_type_default))) }}
apnsetting initialattachapnsetting = null;
if (iaapnsetting != null) else if (mpreferredapn != null) else if (defaultapnsetting != null) else if (firstapnsetting != null)
if (initialattachapnsetting == null) else
}
在上面這個過程中,遍歷當前所有的apn列表,尋找型別是apn_type_default的apn,然後將該apn引數傳遞給modem用於初始的attach。
至此,所有apn準備工作就緒,接下來就是等待需要上網時,將當前apn啟用,然後發起資料連線過程。
QoS 無線資料業務的基礎
從上面的例子中可以看到 qos 對無線資料業務的重要性,當然傳輸速率只是 qos 眾多屬性中的乙個,下文從我理解的角度來說說重要的屬性。順序按照屬性在 qos 結構中的先後次序。還要宣告的是,在 rel 6 的 qos 可以分為相互參照的兩部分,即 r97 98 qos 版本和 rel 6 qos ...
大資料業務分析基本步驟
做什麼事情都要有流程,要知道做什麼,怎麼做,of course,bigdata也不例外。通俗的說就是你要做什麼,你要怎麼做,你要做成什麼,你要解決什麼問題,你的思路是什麼。把需要進行資料分析的事情,拆解成一段一段的來完成,先給自己定個小目標,掙他乙個y,哈哈哈 先分析什麼,後分析什麼,就不會覺得從何...
關於4G資料業務問題
1 手動關閉資料或者進入飛行模式,有ue detach 2 手機資料業務正常進入wifi狀態,有ue release la位置區 plmn lacra 路由區碼 plmn lac rac ta跟蹤區 plmn tac lalocation area 位置區ra routing area 路由區lai...