2012-01-25 28 views
17

我想攔截Android的OS來電屏幕並將其替換爲我的應用的來電屏幕。但是,沒有API可以這樣做,但我確信這是可能的,因爲有4家不同的公司實施了這個功能;我談論的公司有:Adaffix(Yellix),Vringo,WhitePages來電顯示等等。當呼叫到達時,它們全部用他們的應用程序的來電屏幕乾淨地取代OS來電屏幕(沒有延遲,沒有故障,它總是工作)。攔截Android的OS來電屏幕並替換

我能夠找到一個部分解決方案,但這種解決方案並不穩定,因爲它有時會顯示我的應用程序來電屏幕,有時還會顯示操作系統來電屏幕。每個人都會以不同的方式反應。

你有什麼想法嗎?

+0

+1有趣的問題 – Lucifer

+0

+1歡迎SO! – barmaley

回答

6

當您將android.intent.action.PHONE_STATE設置爲響鈴時,您將不得不用控件覆蓋本機屏幕(可能是對話框)。

您必須爲操作android.intent.action.PHONE_STATE註冊BroadcastReceiver。

接收意圖將具有變量TelephonyManager.EXTRA_STATE_RINGING,其將具有當前狀態。

讓我知道!

2

您需要截取廣播android.intent.action.PHONE_STATE具有最高優先級的可能,那麼如果你BroadcastReceiver.onReceive()您將通過BroadcastReceiver.abortBroadcast()取消廣播,你將能夠阻止默認的來電屏幕中顯示,因爲默認的應用程序將不會收到來電廣播。之後,你可以自由展示你自己的Activity

至少同樣的策略適用於傳入短信' - 我曾經這樣做過。

+2

只是要注意,這不適用於處理呼叫,因爲廣播是無序廣播 - 您會收到此錯誤「java.lang.RuntimeException:BroadcastReceiver嘗試在無序廣播期間返回結果」 –