微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VoIP 通话后,Android 通知无法以正确的音量播放

如何解决VoIP 通话后,Android 通知无法以正确的音量播放

我已经在原生 Android 应用程序中实现了 VoIP 呼叫,但我们发现了一个我一直坚持的错误。如果有帮助的话,我正在使用 Twilio 进行 VoIP 通话。

如果我从我们的应用程序拨打拨出 VoIP 电话,通话结束后如果我将应用程序置于后台并收到通知,则通知的音量大约是我拨打电话之前的一半。不仅是我的应用程序的通知,其他应用程序也会受到影响。如果我将我的应用从应用历史记录中移开,使其不再在后台运行,那么通知将返回到以正确的音量播放。

当我接到来电时不会发生这种情况,即使我已经验证相同的代码会断开呼叫连接,无论是来电还是去电。

我已经使用 AudioManager 的 getStreamVolume(AudioManager.STREAM_NOTIFICATION) API 验证,当通知进入时,设备的通知音量仍然一直调高。

由于所有应用程序似乎都受到影响,而不仅仅是我自己的应用程序,我想我可以放心地假设问题不是播放通知声音的代码。我在想可能与 VoIP 通话相关的某些内容没有正确发布,操作系统本身正在以较低的音量播放音调,因为它仍然认为我们在通话中,但我找不到任何证据.

我已确认用于调用Connection 对象正在调用 ondisconnect()destroy()。 我的 ConnectionService 也被销毁了。 根据{{​​1}},通知时的调用状态不是CALL_STATE_OFFHOOK

您还能想到什么会导致通知以降低的音量播放吗?

解决方法

我们在 VOIP 应用程序中也遇到了同样的问题,尽管在我们的案例中我们直接使用 webrtc 而不是 Twilio Video——所以我不知道这是否完全适用于您的案例,但也许可以帮助您找到一些线索。

在我们的例子中,我们发现我们没有在所有 WebRTCPeer 对象上调用 close()。这意味着在通话结束后,AudioTrack 仍然处于活动状态,这会影响音频路由...导致非常安静的铃声/通知声音。

我猜 Twilio Video SDK 的等效项是确保您取消发布和释放所有音轨(以及视频和数据轨道),然后断开 Room 对象。

https://twilio.github.io/twilio-video-android/docs/latest/com/twilio/video/LocalParticipant.html#unpublishTrack-

https://twilio.github.io/twilio-video-android/docs/latest/com/twilio/video/LocalAudioTrack.html#release--

https://twilio.github.io/twilio-video-android/docs/latest/com/twilio/video/Room.html#disconnect--

我们在检查 adb shell dumpsys audio 的输出时发现了一些很好的线索——在坏状态下,我们可以在“Stream Volumes”部分看到响铃/警报/通知流的设备卡在“听筒”上“而不是“扬声器”,并且“播放器”部分中有一个额外的 AudioTrack。

也许这会给你一些尝试的想法......祝你好运!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。