android電話流程(打電話,接電話,掛斷電話)(二)

來源:互聯網
上載者:User

一、關於修改

1、先說一個比較簡單的修改動作,在原生機中有menu菜單,通過MENU可以進行擴音器,靜音,掛斷等功能,但是menu本身有個特性就是點擊螢幕後菜單就會消失,公司給的需求是使MENU能夠一直顯示在螢幕上,之前試了好大功夫想把點擊螢幕菜單消失這個功能給屏蔽掉,可惜試了半天也沒弄出來,我也不清楚是否是在底層就給設定好了的,後來網上說自己重寫個VIEW來“冒充”成MENU,想了想不失為一個好方法。

phone源碼中,涉及到MENU的JAVA檔案有:InCallMenuView(繼承ViewGroup)、InCallMenu和InCallMenuItemView(繼承TextView),層級為InCallMenu包含InCallMenuView,而InCallMenuView又包含InCallMenuItemView。InCallmenu中有很多的InCallMenuItemView(各個MENU鍵的顯示),也設定了各個MENU鍵的ICON,Text什麼的,將其onclicklistener綁定在了incallscreen上。

如果想實現“冒充”的功能:

(1)修改控制項UI部分:在InCallMenu中可以設定UI屬性

(2)編寫incallmenu設定檔(設定各個MENU鍵的marginleft什麼的)

(3)在InCallScreen的設定檔中匯入incallmenu這個設定檔,表示將MENU一直存在於通話介面中(原生中是點擊了MENU才會去匯入)

(4)當然是在incallscreen裡屏蔽MENU鍵,以便兩個MENU介面重複了

附對比圖:

原生的(當MENU點擊時菜單顯示):

經過修改後的(無論點不點擊MENU,始終顯示在通話介面上):

 2、關於來電鎖屏

大家都知道鎖屏來電時,其實只是在incallscreen中顯示了incalltouchui的介面(相當於來電頁面上面貼了一個keyguard而已),

那麼公司需求想換一個來電鎖屏頁面,之前我想到有兩種方法:1、直接在incallscreen中建立一個鎖屏頁面,後來發現incallscreen中本來涉及到的布局就相當多,如果再建立個鎖屏頁面很難將頁面調規整。。於是採用了第二種方法,就是直接在外部建立鎖屏頁面,然後通過此鎖屏頁面再跳轉到incallscreen中,但中間的操作還是很多。

首先看下有什麼痛點:

1、來電時,系統是將號碼直接傳給incallscreen的,我們需要從某個代碼層去截取號碼及連絡人顯示到我們自己的鎖屏頁面中

2、來電時,如果鎖屏狀態,系統會將鎖解開並高亮顯示incallscreen,我們需要高亮顯示自己的鎖屏頁面

3、若有未接來電時,需要將自己的鎖屏頁面關閉並增加狀態列的未接提示

要解決第一點,首先要找到是哪裡的代碼層傳號碼給incallscreen的。

1、通過代碼能得知源碼中的來電資訊是在callcard.java檔案中通過phoneutils.startgetcallerinfo來擷取到的,而負責跳轉到incallscreen的是phoneapp.java。但是這裡面有個問題,callcard是包含在incallscreen中的。我們建立的來電介面是不會有callcard.java檔案的。

解決辦法是將phoneutils.startgetcallerinfo移植到我們自己的來電頁面中

(1)剛才說到負責跳轉來電頁面的是phoneapp.java檔案,在phoneapp中有個displaycallscreen(裡麵包含了getcallscreenclassname方法)方法負責跳到incallscreen中去,我們只需要將裡面的class類改成我們來電頁面類就好了

(2)來電跳到自己的來電介面後,在oncreate去調用phoneutils.startgetcallerinfo。裡面的參數:startgetcallerinfo( context, c, listener, cookie)。

裡面的參數傳入值請參考callcard.java檔案。返回得到的callerinfo裡面就是來電者資訊了,然後再將來電資訊顯示在UI上

(3)這裡面要提醒一下,連絡人頭像用一次startgetcallerinfo可能會擷取不到,於是android給它重新加了一個方法

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.