很长一段时间后收到了Android CALL_STATE_OFFHOOK

时间:2015-03-19 12:09:39

标签: android broadcastreceiver telephonymanager android-context

我有一个呼叫录音应用程序,可以响应来自专用BroadcastReceiver的呼叫状态变化 BroadcastReceiver在我的清单中正确注册,并具有PROCESS_OUTGOING_CALLSREAD_PHONE_STATE权限。

我的问题是,出于某种原因,在一些电话中,我在呼叫结束后几分钟就播出了CALL_STATE_OFFHOOK状态。
似乎广播在某种程度上被卡住了,然后在一段时间后被触发。大约在CALL_STATE_OFFHOOK广播后的X时间之后接收'CALL_STATE_IDLE'后续广播,其中X是实际呼叫所花费的时间。
我的日志验证以前的onReceive次呼叫未挂起进程或BroadcastReceiver。

这种行为可能是什么原因?

更新
我发现这是在我打开或关闭Wi-Fi并开始相对接近Wi-Fi更改的呼叫之后发生的。
这是问题的原因还是实际问题的症状?

2 个答案:

答案 0 :(得分:0)

在Android系统中,广播在内部处理。

有时,由于系统加载/重启/高运行时间,广播接收器有时间接收一些意图

解决方法是,将Flag FLAG_RECEIVER_FOREGROUND 添加到意图发送广播

intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);

这将在问题情景中比以前更加加快广播投放

答案 1 :(得分:0)

事实证明,这是Android发送的广播中的一个错误(或者是一些故障接收器)。调查log cat表明,一些系统接收器确实按时播放,而其他系统接收器(在我之前)经过很长时间收到广播。
这种情况经常在呼叫开始时Wi-Fi状态发生变化时发生。

我所做的是创建ITelephony代理(归功于End call in android programmatically)并监控其状态。


感谢帮助者:)