【问题标题】:Android CALL_STATE_OFFHOOK received after a very long time很长一段时间后收到Android CALL_STATE_OFFHOOK
【发布时间】:2015-03-19 12:09:39
【问题描述】:

我有一个通话录音应用,它可以对来自专用 BroadcastReceiver 的通话状态变化做出反应。
BroadcastReceiver 在我的清单中正确注册,以及PROCESS_OUTGOING_CALLSREAD_PHONE_STATE 权限。

我的问题是,由于某种原因,在某些通话中,我在通话结束几分钟后收到了CALL_STATE_OFFHOOK 状态广播。
似乎广播以某种方式卡住了,然后在一段时间后触发。自 CALL_STATE_OFFHOOK 广播后大约 X 时间后收到“CALL_STATE_IDLE”后续广播,其中 X 是实际呼叫所用的时间。
我的日志验证之前的 onReceive 调用没有挂起进程或 BroadcastReceiver。

造成这种行为的原因是什么?

更新:
我发现这发生在我打开或关闭 Wi-Fi 并在相对接近 Wi-Fi 变化时开始通话后。
这是问题的原因还是实际问题的症状?

【问题讨论】:

    标签: android broadcastreceiver telephonymanager android-context


    【解决方案1】:

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

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

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

    intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
    

    这将比以前在问题场景中加快广播传输速度

    【讨论】:

    • 广播是从 Android TeleohonyManager 发送的,而不是我发送的。这仍然适用吗?谢谢
    • 否,则不适用。我以为您正在发送此广播并在其他地方接收。但是在这个问题上,我认为谷歌更新可能已经解决了这个问题,我们需要等待下一个版本
    • 我发现这发生在我打开或关闭我的 Wi-Fi 并开始一个相对接近 Wi-Fi 变化的呼叫之后。这是问题的原因还是实际问题的症状?
    【解决方案2】:

    原来是 android 发送的广播中的一个错误(或者一些故障接收器)。调查 log cat 显示,一些系统接收器确实按时收到广播,而其他系统接收器(在我之前)在很长一段时间后才收到。
    只要在通话开始期间 Wi-Fi 状态发生变化,就会经常发生这种情况。

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


    感谢帮助:)

    【讨论】:

      猜你喜欢
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2012-06-15
      • 2019-12-02
      • 2018-12-29
      • 1970-01-01
      相关资源
      最近更新 更多