Android Phone積累

1.Android手機(jī)可能會(huì)有兩張SIM卡漓概,每張SIM卡是一個(gè)PhoneAccount,PhoneAccount對(duì)象是在哪里新建的根时?

        TelecomAccountRegistry.java (packages\services\telephony\src\com\android\services\telephony)的registerPstnPhoneAccount方法PhoneAccount.builder(phoneAccountHandle, label).build()

2.Sim卡信息(包括顏色)是哪里設(shè)置的瘦赫?
SubscriptionController的addSubInfoRecord方法,里面包括sim卡的信息蛤迎,并且將這些信息保存到了TelephonyProvider數(shù)據(jù)庫(kù)中确虱。
3.桌面上電話圖標(biāo)打開的是哪個(gè)界面?
Activity是DialtactsActivity替裆,星號(hào)對(duì)應(yīng)的Fragment是SpeedDialFragment校辩。加載數(shù)據(jù)的CursorLoader是ContactTileLoaderFactory.createStrequentPhoneOnlyLoader。Adapter是PhoneFavoritesTileAdapter辆童,ListView的item是PhoneFavoriteSquareTileView宜咒。
4.INNER JOIN和Left Outer Join
A INNER Join B 完全連接,列出A和B中都存在的記錄
A Left Outer Join B把鉴,列出A和B都存在的記錄故黑,也列出A中去除交集的部分
5.撥號(hào)數(shù)字UI
dialpad_fragment.xml ---> dialpad_view.xml--->dialpad_view_unthemed.xml--->dialpad.xml(這個(gè)里面有數(shù)字按鍵)
通話界面點(diǎn)擊鍵盤出來的是InCallUI下面的DialpadFragment,而撥打電話的時(shí)候是diapad下面的DialpadFragment庭砍。

6.TelecomManager,TelephonyManager相關(guān)
TelecomManager和TelephonyManager都有g(shù)etTelecomService方法场晶,這個(gè)Service的實(shí)現(xiàn)在TelecomServiceImpl類中。
TelephonyManager有g(shù)etITelephony方法怠缸,這個(gè)Service的實(shí)現(xiàn)是在PhoneInterfaceManager類中诗轻。

7.來電鈴聲
代碼在DialerRingtoneManager.java

8.CallList
所有對(duì)Call的操作都在updateCallInMap方法中:如果狀態(tài)是disconnected并且此call已經(jīng)存在,更新mCallById揭北、mCallMap扳炬、mCallByTelecomCall;如果狀態(tài)不是IDLE和INVALID罐呼,更新mCallById鞠柄、mCallMap、mCallByTelecomCall嫉柴;剩下的狀態(tài)將Call對(duì)象從mCallById厌杜、mCallMap、mCallByTelecomCall中移除。
調(diào)用updateCallInMap的方法有onCallRemoved夯尽、onDisconnect瞧壮、onIncoming、clearOnDisconnect匙握、onUpdateCall咆槽、finishDisconnectedCall。
調(diào)用過程為(InCallServiceImpl的server端為InCallController圈纺,而CallsManager會(huì)回調(diào)給InCallController秦忿,所以CallsManager對(duì)Call是真正的管理者,Dialer中的CallList數(shù)據(jù)來自CallsManager):
CallsManager將InCallController加入到mListeners中蛾娶,并進(jìn)行callback回調(diào)---》InCallController的updateCall---》InCallServiceBinder的updateCall---》InCallService的handleMessage如MSG_UPDATE_CALL---》Call(base/telecom)的fireCallDestroyed---》Phone(base/telecom)的fireCallRemoved---》InCallService(base/telecom)的內(nèi)部類mPhoneListener的onCallRemoved被調(diào)用---》InCallServiceImpl的onCallRemoved---》InCallPresenter的onCallRemoved---》CallList的onCallRemoved

9.CallAudio相關(guān)
CallAudioModeStateMachine對(duì)象由CallsManager創(chuàng)建灯谣,在構(gòu)造函數(shù)中默認(rèn)為mUnfocusedState,然后send一個(gè)INITIALIZE的message蛔琅,CallsManager的狀態(tài)發(fā)生變化后會(huì)調(diào)用CallAudioManager的onCallEnteringActiveDialingOrConnecting方法胎许,然后調(diào)用CallAudioModeStateMachine的sendMessageWithArgs(NEW_ACTIVE_OR_DIALING_CALL)------》CallAudioModeStateMachine的UnfocusedState收到NEW_ACTIVE_OR_DIALING_CALL后,進(jìn)入mSimCallFocusState罗售,之后會(huì)調(diào)用mCallAudioManager的setCallAudioRouteFocusState(HAS_FOCUS)------>CallAudioRouteStateMachine的sendMessageWithSessionInfo(SWITCH_FOCUS,HAS_FOCUS)------>CallAudioRouteStateMachine的ActiveEarpieceRoute的enter方法辜窑。
CallAudioRouteStateMachine對(duì)象由CallsManager創(chuàng)建然后初始化initialize,initialize方法中的getInitialAudioState初始化Audio寨躁,默認(rèn)是ROUTE_EARPIECE穆碎,所以會(huì)調(diào)用到QuiescentEarpieceRoute的enter方法,


接聽電話過程中插入耳機(jī):WiredHeadsetManager收到headsetplugginchanged事件后朽缎,callback給事件接收者CallAudioRoutePeripheralAdapter惨远,然后send消息CONNECT_WIRED_HEADSET給CallAudioRouteStateMachine谜悟,這樣從ActiveEarpieceRoute切換到ActiveHeadsetRoute话肖。

10.CallsManager是在TelecomSystem中新建的。
11.Telephony中有很多Call類葡幸,他們之間的關(guān)系是什么最筒?

Call folow.png

12.有時(shí)候會(huì)出現(xiàn)開機(jī)第一次默認(rèn)勾選的APN不是第一個(gè),如Vodafone的APN蔚叨。
DcTracker在createAllApnList方法里面是按照id來排序去查找carriers床蜘,然后會(huì)將apn列一樣的合并起來,印度Vodafone的APN中MMS和VodafoneLive! apn列一樣蔑水,會(huì)被合并成一個(gè)邢锯,由于VodafoneLive!可以處理default類型,這樣VodafoneLive搀别!會(huì)被當(dāng)作默認(rèn)的apn丹擎,在Settings里面查找carriers表是按照name排序的所以Vodafone Connect是在第一個(gè)。就會(huì)出現(xiàn)第一次開機(jī)默認(rèn)勾選第二個(gè)VodafoneLive!,恢復(fù)默認(rèn)會(huì)變成第一個(gè)Vodafone Connet。

13.主叫流程

MOCall.png

14.Phone相關(guān)的AIDL

aidl.png

15.來一通電話蒂培,從頭分析
看PstnIncomingCallNotifier的mHandler如何處理

16.通話中聯(lián)系人名稱從哪里來再愈?

CallContact.png

17.DcNetworkAgent是由誰來創(chuàng)建的?
PhoneSwitcher會(huì)調(diào)用到DcTracker的requestNetwork并傳過來NetworkRequest對(duì)象护戳。
requesetNetwork方法:a.通過NetworkRequest的networkCapabilities來得到對(duì)應(yīng)的apnId翎冲,如APN_DEFAULT_ID,APN_IMS_ID媳荒;b.通過apnId得到ApnContext;c.調(diào)用ApnContext的incRefCount抗悍,這個(gè)方法會(huì)調(diào)用DcTracker的setEnabled方法
DcTracker的setEnabled方法:調(diào)用onEnableApn方法祟绊,onEnableApn方法會(huì)調(diào)用applyNewState方法纸泡,然后調(diào)用trySetupData方法随夸,然后一直調(diào)用到trySetupData方法兆沙。
trySetupData方法:a.createDataConnection荞膘;b.DcAsyncChannel的bringUp方法
createDataConnection方法:a.makeDataConnection面氓,新建DataConnection對(duì)象绝骚,并進(jìn)入DcInactivieState蜜葱;b.new DcAsyncChannel;c.DcSyncChannel的fullyConnectSync,設(shè)置了下srcMessager和dstMessager
DcAsyncChannel的bringUp方法:發(fā)消息EVENT_CONNECT給dstMessager田柔,這個(gè)消息是DataConnection的當(dāng)前狀態(tài)DcInactiveState收到俐巴,先initConnection,再調(diào)用onConnect(調(diào)用RIL的setupDataCall,當(dāng)此方法結(jié)束后會(huì)發(fā)送EVENT_SETUP_DATA_CONNECTION_DONE消息)硬爆,進(jìn)入DcActivatingState狀態(tài)欣舵,當(dāng)DcActivatingState收到EVENT_SETUP_DATA_CONNECTION_DONE消息時(shí),進(jìn)入DcActiveState狀態(tài)缀磕,這個(gè)狀態(tài)會(huì)新建DcNetworkAgent缘圈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市袜蚕,隨后出現(xiàn)的幾起案子糟把,更是在濱河造成了極大的恐慌,老刑警劉巖牲剃,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遣疯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凿傅,警方通過查閱死者的電腦和手機(jī)缠犀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聪舒,“玉大人辨液,你說我怎么就攤上這事∠洳校” “怎么了滔迈?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我亡鼠,道長(zhǎng)赏殃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任间涵,我火速辦了婚禮仁热,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勾哩。我一直安慰自己抗蠢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布思劳。 她就那樣靜靜地躺著迅矛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪潜叛。 梳的紋絲不亂的頭發(fā)上秽褒,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音威兜,去河邊找鬼销斟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛椒舵,可吹牛的內(nèi)容都是我干的蚂踊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笔宿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼犁钟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泼橘,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤涝动,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后侥加,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捧存,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年担败,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镰官。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡提前,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泳唠,到底是詐尸還是另有隱情狈网,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拓哺,受9級(jí)特大地震影響勇垛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜士鸥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一闲孤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烤礁,春花似錦讼积、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鲤脏,卻和暖如春们颜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猎醇。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工掌桩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姑食。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓波岛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親音半。 傳聞我的和親對(duì)象是個(gè)殘疾皇子则拷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容