我有一个呼叫录音应用程序,可以响应来自专用BroadcastReceiver的呼叫状态变化
BroadcastReceiver在我的清单中正确注册,并具有PROCESS_OUTGOING_CALLS
和READ_PHONE_STATE
权限。
我的问题是,出于某种原因,在一些电话中,我在呼叫结束后几分钟就播出了CALL_STATE_OFFHOOK
状态。
似乎广播在某种程度上被卡住了,然后在一段时间后被触发。大约在CALL_STATE_OFFHOOK
广播后的X时间之后接收'CALL_STATE_IDLE'后续广播,其中X是实际呼叫所花费的时间。
我的日志验证以前的onReceive
次呼叫未挂起进程或BroadcastReceiver。
这种行为可能是什么原因?
更新
我发现这是在我打开或关闭Wi-Fi并开始相对接近Wi-Fi更改的呼叫之后发生的。
这是问题的原因还是实际问题的症状?
答案 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)并监控其状态。
感谢帮助者:)