android - AudioFocus 请求拒绝 OpenTok(Tokbox) 在相同添加的呼叫中,android 9 和 10
问题描述
Android Telecom Manager 在添加的 VOIP 呼叫中没有传入音频/声音
我正在尝试在我的应用中添加 VOIP 视频通话。我已经注册了电话帐户并将呼叫添加到 TelecomManager。呼叫被成功接听。我已经实现了 Connection 和 ConnectionService。
我正在使用以下代码添加呼叫。
var uri = Android.Net.Uri.FromParts(PhoneAccount.SchemeSip, voipCallInfo.Payload?.CallerName, null);
extras.PutParcelable(TelecomManager.ExtraIncomingCallAddress, uri);
extras.PutParcelable(TelecomManager.ExtraPhoneAccountHandle, phoneAccountHandle);
telecomManager.AddNewIncomingCall(phoneAccountHandle, extras);
我正在使用下面的代码来接听来电。
var telecomManager = GetTelecomManager();
if (telecomManager == null)
{
logger.Error("Telecom Manager is null, May be permissions not granted");
return;
}
try
{
.
.
.
telecomManager.AcceptRingingCall();
.
.
}
catch (Exception ex)
{
logger.Error("RequestSystemToAnswerCall Exception : " + ex.Message);
}
我试图请求音频焦点,但是当我在电信管理器中添加呼叫时,我的应用程序失去焦点,因为电话开始响铃。在我接受呼叫应用程序后,我相信 Telecom/Call 有焦点,但我什么也听不到。通话中的其他人可以毫无问题地听到我的声音。当我结束通话时,应用程序会重新获得焦点。
我可以在日志中看到下面的内容。
2020-06-22,14:09:34.831 WebRTCManager Trace IsAudioSubscriptionEnabled True
[AudioManager] Use of stream types is deprecated for operations other than volume control
[AudioManager] See the documentation of requestAudioFocus() for what to use instead with android.media.AudioAttributes to qualify your playback use case
[AUDIO_FOCUS] Audio Focus request DENIED !
下面是我用于请求音频的代码。
public bool RequestAudioFocus()
{
var amanager = (AudioManager)GetSystemService(AudioService);
AudioFocusRequest audioFocusRequest;
if (Build.VERSION.SdkInt > BuildVersionCodes.O)
{
audioFocusRequest = amanager.RequestAudioFocus(new AudioFocusRequestClass.Builder(AudioFocus.Gain)
.SetAudioAttributes(new AudioAttributes.Builder().SetLegacyStreamType(Stream.VoiceCall).Build())
.SetOnAudioFocusChangeListener(this)
.Build());
}
else
{
audioFocusRequest = amanager.RequestAudioFocus(this, Stream.VoiceCall, AudioFocus.Gain);
}
Debug.WriteLine("MainActivity RequestAudioFocus audioFocusRequest : " + audioFocusRequest);
if (audioFocusRequest == AudioFocusRequest.Granted)
{
return true;
}
return false;
}
当我不使用 TelecomManager 建立 VOIP 连接时。一切正常。所以我相信当我添加并接听电话时会出现问题。
感谢您的任何想法或修复。
解决方案
之所以听不到任何声音,是因为 OpenTok 服从了 RequestAudioFocus 的结果。由于音频焦点请求失败,OpenTok 将不会播放音频。您可以找出 RequestAudioFocus 失败的原因或下载到 Xamarin.OpenTok.Android 2.14.2 以便即使 RequestAudioFocus 失败也能播放音频。
推荐阅读
- java - 如何在 libGDX 中以相反的方式射击子弹
- c# - 是否有一个选项可以在不制作“GlobalSuppressions.cs”文件的情况下停用样式警察规则?
- asp.net-core - 为什么在使用 IIS Express 而不是 Kestrel 时 Active Directory 可以与 Visual Studio MVC 模板一起使用?
- raspberry-pi3 - 当光标放在 wxTextCtrl 上时,调用屏幕键盘的最佳方法是什么?
- javascript - 有没有办法使用 UI Kitten 将主色设置为 Layout 组件的背景色?
- c# - 如何发送延续令牌来查询天蓝色的时间序列见解?
- java - 保存数组中两个数字之间的奇数
- xquery - 存在-db - 文件:移动不移动文档
- gradle - 如何使用环境名称设置 gradle test 命令
- c# - C# ChromeDriver:javascript 错误:未处理的对象