1. 程式人生 > >Android 4.4Telephony流程分析SIM卡開機時的資料載入

Android 4.4Telephony流程分析SIM卡開機時的資料載入

本文程式碼以MTK平臺Android 4.4為分析物件,與Google原生AOSP有些許差異,請讀者知悉。

本文主要介紹sim卡資料的讀取過程,當射頻狀態處於準備狀態時,此時UiccCardApplication應處於AppState.APPSTATE_READY狀態,我們沿著這個訊號跟蹤下去。閱讀本文時可先閱讀Android4.4 Telephony流程分析——SIM卡開機時的初始化一文,瞭解Radio和sim卡狀態更新過程。

先來看一下資料載入的序列圖:

\

step1~step3,走的是更新過程,建立過程參考Android4.4 Telephony流程分析——SIM卡開機時的初始化一文step21之後的步驟。

step4,通過Modem查詢sim卡的FDN(固定撥號)資料。

step5,通過Modem查詢sim卡的pin1狀態。

step6~step7,將pin1狀態通知出去,IccCardProxy會註冊mPinLockedRegistrants。

step8~step9,將sim卡ready狀態發出去。

01.private void notifyReadyRegistrantsIfNeeded(Registrant r) { 02.if (mDestroyed) { 03.return; 04.} 05.if (mAppState == AppState.APPSTATE_READY) {
06.if (mPin1State == PinState.PINSTATE_ENABLED_NOT_VERIFIED || 07.mPin1State == PinState.PINSTATE_ENABLED_BLOCKED || 08.mPin1State == PinState.PINSTATE_ENABLED_PERM_BLOCKED) { 09.loge("Sanity check failed! APPSTATE is ready while PIN1 is not verified!!!"); 10.// Don't notify if application is in insane state
11.return; 12.} 13.if (r == null) { 14.if (DBG) log("Notifying registrants: READY"); 15.mReadyRegistrants.notifyRegistrants(); 16.else { 17.if (DBG) log("Notifying 1 registrant: READY"); 18.r.notifyRegistrant(new AsyncResult(nullnullnull)); 19.} 20.} 21.}
如果此時pin1是被啟用的,也就是sim卡開啟了pin1鎖,sim卡ready狀態就不會發出去。

監聽mReadyRegistrants狀態變化的物件很多,主要有:SIMRecords(同類的還有RuimRecords、IsimUiccRecords),IccCardProxy(會將SIM卡狀態廣播出去),GsmServiceStateTracker(會根據SIM狀態去註冊網路),這裡主要說一下SIMRecords,讀取SIM的資料。

step12,fetchSimRecords()方法:

001.//MTK-END [mtk80601][111215][ALPS00093395] 002.protected void fetchSimRecords() { 003.mRecordsRequested = true; 004. 005.if (DBG) log("fetchSimRecords " + mRecordsToLoad); 006. 007.mCi.getIMSIForApp(mParentApp.getAid(), obtainMessage(EVENT_GET_IMSI_DONE));//讀IMSI 008.mRecordsToLoad++; 009. 010.//iccFh.loadEFTransparent(EF_ICCID, obtainMessage(EVENT_GET_ICCID_DONE)); 011.//mRecordsToLoad++; 012. 013.// FIXME should examine EF[MSISDN]'s capability configuration 014.// to determine which is the voice/data/fax line 015.//new AdnRecordLoader(phone).loadFromEF(EF_MSISDN, EF_EXT1, 1, 016.//obtainMessage(EVENT_GET_MSISDN_DONE)); 017.//recordsToLoad++; 018.

相關推薦

Android 4.4Telephony流程分析SIM開機資料載入

本文程式碼以MTK平臺Android 4.4為分析物件,與Google原生AOSP有些許差異,請讀者知悉。 本文主要介紹sim卡資料的讀取過程,當射頻狀態處於準備狀態時,此時UiccCardApplication應處於AppState.APPSTATE_READ

Android wifi 掃描流程 分析

void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec) { int res; if (wpa_s->p2p_mgmt) { wpa_dbg(wpa_s, MSG_DEBU

[譯]Android Application啟動流程分析

譯者注: 原文分成兩個部分, 連結如下: http://multi-core-dump.blogspot.com/2010/04/android-application-launch.html http://multi-core-dump.blogspot.com/2010/04/

Android 呼吸燈流程分析(一)

一、Android 呼吸燈的使用      在講呼吸燈實現流程之前,我們先看一下如何使用它。      Android提供了呼吸燈的介面,我們可以通過該介面,控制呼吸燈的閃爍頻率和佔空比。具體程式碼如下: package com.example.test; import

Android Application啟動流程分析

作者曾經在高通的Android效能組工作, 主要工作是優化Android Application的啟動時間. 1, App基礎理論 要想優化App啟動時間, 第一步就是了解App啟動程序的工作原理. 有幾個基礎理論: Android Application與其他移

Android Wifi框架流程分析

//在 SystemServer 啟動的時候,啟動WifiService呼叫關係如下: public static void main(String[] args) { new SystemServer().run(); } pr

Android 呼吸燈流程分析(二)

一、Android呼吸燈Driver實現       1、註冊驅動       程式碼位置:mediatek/kernel/drivers/leds/leds_drv.c 602static struct platform_driver mt65xx_leds_drive

獲取android手機了通訊錄和sim聯絡人

private ArrayList<SamContact> getAllContacts(){ArrayList<SamContact> arrayList = new ArrayList<SamContact>();//獲取本機聯絡人C

android獲取手機通訊錄和sim通訊錄

獲取手機通訊錄 1 許可權 <uses-permission android:name="android.permission.READ_CONTACTS"/> 注意6.0還需要動態許可權 demo會有詳細的 2.獲取手機通訊錄 // 獲取手機聯絡人

Android Activity啟動流程分析

概述 Activity作為Android的四大元件之一,Android主要的介面組成部分,用於直接跟使用者進行互動操作,在面試中與Activity相關的知識也是經常被問到,如果你面試的高階崗位,那麼對Activity的啟動和繪製流程就必須的熟悉,本文將從Act

android camera2 API流程分析

Android camera2 API流程分析 Android5.0之後,新推出來了一個類,android.hardware.ca

4大案例分析金融機構的大資料應用

就“大資料+金融”思維利用而言,國外金融機構有著十足豐富的體現,已經將大資料技術在風險控制、運營管理、銷售支援及商業模式創新等領域進行了全面的嘗試。 案例一:匯豐銀行-風險管理 匯豐銀行在防範信用卡和借記卡欺詐的基礎上,利用SAS構建了一套全球業務網路的防欺詐管理系統,

netlink監聽網路變化程式碼(轉載)+流程分析(原創+轉載)+資料結構以及相關巨集的解析(原創)

一.netlink監聽網路變化程式碼(Linux下使用NetLink 監聽網路變化) #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h>

Android】【問題分析】G-sensor因資料互動問題導致手機crash

通過工作抓取到的kernel層的log(截選重要部分)如下顯示: <6>[ 7040.264871] SysRq: Show backtrace of all active CPUs <6>[ 7040.264925]Backtrace for cpu 0 (current):

Android學習記錄(二十)-viewpager切換資料載入的簡單優化。

背景:預設的viewpager是要載入前後兩個view的資料的。 如果你有定時輪詢其它頁面的網路請求時。。。。沒必要的開銷有時候會很坑,尤其是弱網。。。 方法2種: 1.什麼修改包的預設屬性這種不適合偶們。 2.在不可見的時候,網路的定時器不要起,或者關掉就o了。 複寫:

Android系統載入Apk檔案的時機和流程分析(1)--Android 4.4.4 r1的原始碼

Android系統在啟動時安裝應用程式的過程,這些應用程式安裝好之後,還需要有一個Home應用程式來負責把它們在桌面上展示出來,在Android系統中,這個預設的Home應用程式就是Launcher了。Android系統的Home應用程式Launcher是由Activit

Android 4.4KitKat AudioRecord 流程分析

  Android是架構分為三層: 底層      Linux Kernel 中間層  主要由C++實現 (Android 60%原始碼都是C++實現) 應用層  主要由JAVA開發的應用程式   應用程式執行過程大致如下: JAVA應用程式產生操作(播放音樂或停止),然後通過JNI呼叫進入中

Android開機流程分析 -- init程序

init程序(system\core\init)是Linux Kernal啟動之後,在使用者空間執行的第一個程序。init程序是一個守護程序,它的生命週期貫穿整個Linux核心執行的始終,在Linux系統中的所有程序都是由init程序建立並執行的。因為Android是基於L

Android 4.4 自動撥打分機流程分析

Android 自動撥打分機流程分析,現在我們只關注framework層,以CDMA為例,GSM同理。 至於什麼是自動撥打分機,如下圖,輸入一個電話號碼,再選擇“等待時間延長2秒”,就會顯示一個分號,接著就可以輸入分機號碼了 本文來自http://b

【轉】Android 4.0 Launcher2源碼分析——啟動過程分析

handler flag 這一 第一次啟動 asynctask pla size ontouch wait Android的應用程序的入口定義在AndroidManifest.xml文件中可以找出:[html] <manifest xmlns:android="htt