android4.2 telephone應用層分析
InCallScreen.java
復制通話界面的顯示和提供人機交互的接口。進入該界面第一個調用ONCreate。否則進入OnNewIntent,該配置文件是incall_screen.xml,當中incallPanel為通話聯系人的信息和狀態顯示,配置文件為call_card.xml,包括兩路通話的view定義;InCallTouchUi顯示通過管理的控制UI。相應配置文件為incall_touch_ui.xml;
mhandle的handleMessage方法接收到framework的CallManager發出的不同Phone狀態的變化。更新UI。消息類型例如以下:
SUPP_SERVICE_FAILED:彈出mSuppServiceFailureDialog
PHONE_STATE_CHANGED:調用requestUpdateScreen方法請求更新通話界面,發送 REQUEST_UPDATE_SCREEN消息
REQUEST_UPDATE_SCREEN:內部調用UpdateScreen
PHONE_DISCONNECT:通話連接失敗時調用。在delayedCleanupAfterDisconnect中退出通話界面
handleOnscreenButtonClick響應通話控制的點擊button,涉及通話能力控制的相關處理邏輯
PhoneUtils類中的靜態方法。如接聽電話、掛斷電話、恢復、保持通話等通話控制的操作。
聯系人信息:CallCard
通話聯系人信息的顯示和更新實在InCallScreen的updateScreen中完畢的,調用Callcard的updateState方法,displayMaincallStatus顯示更新第一路通話的信息。displayOnHoldCallStatus顯示hold通話保持的第二路通話信息。通過PhoneUtils.getCallerInfo獲取CallerInfo對象。保存了通話聯系人的基本信息。
IncallTouchUI 通話控制:
incomingCallWidget
:接通/掛斷/短信回復時須要使用;manageConferenceButton:多方通話的界面跳轉控制button,僅僅有在多方通話時才顯示。
dialpadButton:也就是顯示或隱藏撥號盤(DTMF);
audioButton:開啟/關閉揚聲器;
muteButton:開啟/關閉麥克風靜音。開啟之後對方無法聽到你的聲音。
holdButton:開啟/關閉呼叫保持。
addButton:添加多路通話。也就是在通話的過程中能夠暫停當前通話,撥打還有一路通話並接通;
通話控制相關的控件在IncallTouchUI 的updateState中更新,實現OnTriggerListener接口,該接口為鎖屏控制的接口,這裏4.2做了個改動。在OnTrigger函數中。區分向上、向左和向右三個方向直接定義0,1,2,而不使用SlidingTab的類。在InCallScreen的OnResume和OnPause中註冊ACTION_HEADSET_PLUG接收耳機免提事件的廣播,發送EVENT_HEADSET_PLUG_STATE_CHANGED消息,調用showAudioModePopup顯示出菜單,進入InCallTouchUI的onMenuItemClick切換音頻輸出的策略。
DTMFTwelveKeyDialer
布局文件為dtmf_twelve_key_dialer_view.xml,由輸入框dtmfDialerField和12按鍵dialpad.xml組成。
PhoneGlobals:
4.2中將4.0中的PhoneApp中的內容移到了PhoneGlobals中。
OnCreate中創建mWakeLock和mPartialWakeLock進行Phone應用的電源管理。
獲取了mWakeLock後。設置中的休眠時間不起作用,屏幕一直高亮,直到鎖釋放或者手動按power鍵。獲取了mPartialWakeLock後,此時能夠關閉屏幕和鍵盤燈。但不是立馬關閉。直到設置的休眠時間到了。關屏。
Sensor感應器獲取手機當前的方位,推斷手機是否靠近臉部。
mProximityWakeLock電源喚醒鎖,獲取之後,關閉屏幕。
MediaButtonBoardcastReceive接收耳機HOOK的廣播事件。調用PhoneUtils的 handleHeadsetHook響應耳機的HOOK事件。
PhoneAppBoardcastReceive處理Phone應用中雜項的廣播事件,像飛行模式、數 據連接、SIM卡狀態等變化。
CallNotify:
onNewRingingConnect接收到來電後的處理,調用startIncommingCallQuery查詢 聯系人信息。通過PhoneUtils的startGetCallerInfo獲取GSMConnection的 userData查詢 到CallerInfo中。
onPhoneStatechanged通話狀態變化的處理。 onDisconnect通話連接斷開的處理。連接斷開有三種類型callLogType:
INCOMMING_TYPE(來電)OUTGOING_TYPE(呼叫)MISSED_TYPE(未接來電)
android4.2 telephone應用層分析