資料業務建立流程之常規APN引數的建立(原)

2021-07-06 08:47:49 字數 3043 閱讀 6755

區別於前面的緊急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...