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(
null
,
null
,
null
));
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