我想拦截Android的操作系统来电屏幕并将其替换为我的应用的来电屏幕。但是,没有API可以这样做,但我确信有可能由于4家不同的公司实施了这一点; 我正在谈论的公司是:Adaffix(Yellix),Vringo,WhitePages来电显示等等。当呼叫到达时,它们都干净利用应用程序的来电屏幕替换操作系统来电屏幕(没有延迟,没有故障,它始终有效)。
我能够找到部分解决方案,但此解决方案不稳定,因为有时它显示我的应用来电屏幕,有时显示操作系统来电屏幕。每次通话都会有不同的反应。
你有什么想法吗?
答案 0 :(得分:6)
当你将android.intent.action.PHONE_STATE作为响铃时,你必须用控件(可能是一个对话框)覆盖原生屏幕。
你必须为动作android.intent.action.PHONE_STATE注册一个BroadcastReceiver。
接收意图将有一个变量TelephonyManager.EXTRA_STATE_RINGING,它将具有当前状态。
让我知道!
答案 1 :(得分:2)
您需要拦截具有最高优先级的广播android.intent.action.PHONE_STATE
,如果在BroadcastReceiver.onReceive()
中您将通过BroadcastReceiver.abortBroadcast()
取消广播,您将能够停止默认来电屏幕显示,因为默认应用程序将不会接收来电广播。之后,您可以自由展示自己的Activity
。
至少相同的策略适用于收到的短信' - 我过去常做的如上所述。
答案 2 :(得分:2)
我猜你可能完成了95%的工作。您的屏幕没有显示但系统来电的问题可以这样解决: