天天看點

Android 來電靜音鍵攔截流程

現在在做雙卡雙待的項目!作為主要核心Phone遇到的問題也是千奇百怪!

今天就被一個問題困擾了一下午--來電後按聲音按鍵需要靜音!因為是雙Phone對象是以對應的RINGER也有兩個!

分析一下解BUG流程!

最開始以為按鍵處理會在InCallScreen.java裡面的

後來發現了這行注釋

         // Note there's no KeyEvent.KEYCODE_ENDCALL case here.

         // The standard system-wide handling of the ENDCALL key

         // (see PhoneWindowManager's handling of KEYCODE_ENDCALL)

         // already implements exactly what the UI spec wants,

         // namely (1) "hang up" if there's a current active call,

         // or (2) "don't answer" if there's a current ringing call.

原來在WindowManagerService會有一個  int actions = mPolicy.interceptKeyTq(event, !screenIsOff);

對應的PhoneWindowManager裡會有一個

方法

此方法可以在最初的位置進行攔截事件處理!

phoneServ.silenceRinger();

最終調用的是

以此來電時按聲音鍵會靜音!

當然在InCallScreen.java裡面那個是個候補!呵呵呵!這樣做的好處就是當你在任何界面做為前台程序時都可以按聲音鍵關掉你的來電鈴聲!

當然在InCallScreen.java裡面的也對按鍵進行了攔截

比如

這樣做是為了差別某哥界面的狀态對應的按鍵事件!比如Incallscreen接了電話和沒接電話幾個按鍵的事件就不同!

繼續閱讀