拦截Android';s OS来电屏幕和更换

拦截Android';s OS来电屏幕和更换,android,Android,我想截取Android操作系统的来电屏幕,并将其替换为我的应用程序的来电屏幕。然而,没有API可以这样做,但我确信这是可能的,因为有4家不同的公司实现了这一点; 我谈论的公司有:阿达菲克斯(Yellix)、维林戈(Vringo)、WhitePages来电显示等等。当来电到达时,他们都用应用程序的来电屏幕干净地替换了操作系统的来电屏幕(没有延迟,没有故障,它一直在工作) 我能够找到一个部分解决方案,但这个解决方案并不稳定,因为它有时会显示我的应用程序来电屏幕,有时会显示操作系统来电屏幕。每个电话的

我想截取Android操作系统的来电屏幕,并将其替换为我的应用程序的来电屏幕。然而,没有API可以这样做,但我确信这是可能的,因为有4家不同的公司实现了这一点; 我谈论的公司有:阿达菲克斯(Yellix)、维林戈(Vringo)、WhitePages来电显示等等。当来电到达时,他们都用应用程序的来电屏幕干净地替换了操作系统的来电屏幕(没有延迟,没有故障,它一直在工作)

我能够找到一个部分解决方案,但这个解决方案并不稳定,因为它有时会显示我的应用程序来电屏幕,有时会显示操作系统来电屏幕。每个电话的反应都不同


你知道吗?

当你听到android.intent.action.PHONE_状态为铃声时,你必须在本机屏幕上覆盖一个控件(可能是一个对话框)

您必须为action android.intent.action.PHONE_状态注册广播接收器

接收目的将有一个可变的TelephonyManager.EXTRA_STATE_Ring,它将具有当前状态


让我知道

您需要以尽可能高的优先级拦截广播
android.intent.action.PHONE\u STATE
,然后如果在
broadcast.onReceive()
中,您将通过
broadcast.abortBroadcast()
取消广播,您将能够停止显示的默认来电屏幕,因为默认应用程序不会接收传入呼叫广播。之后,您可以自由地显示自己的
活动


至少同样的策略也适用于收到的短信,我过去常常这样做。

我想你可能已经完成了95%的工作。屏幕未显示但系统来电的问题可以通过以下方式解决:


请注意,这不适用于处理呼叫,因为广播是非顺序广播-您会收到以下错误“java.lang.RuntimeException:BroadcastReceiver试图在非顺序广播期间返回结果”