android - AudioFocus 请求拒绝 OpenTok(Tokbox) 在相同添加的调用中,android 9 和 10

标签 android xamarin opentok tokbox voip-android

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);
}
我试图请求音频焦点,但是当我在电信管理器中添加调用时,我的应用程序失去焦点,因为电话开始响铃。在我接受调用应用程序后,我相信电信/调用没有焦点 但我什么都听不见 .通话中的其他人可以毫无问题地听到我的声音。当我结束通话时,应用程序会重新获得焦点。
我可以在日志中看到下面的内容。
    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 失败也能播放音频。

关于android - AudioFocus 请求拒绝 OpenTok(Tokbox) 在相同添加的调用中,android 9 和 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62490573/

相关文章:

javascript - 三星 Galaxy S3 上的 Mobiscroll ParseInt 异常

java - android应用程序执行过程中的错误

android - Google+ 登录 onConnected 未调用

android - 使用 Xamarin 的 Paypal REST API

android - 如何在 Tokbox 中将相机灯设置在手电筒上?

ios - opentok/tokbox iOS SDK 中流(发布者)的订阅者数量限制是多少?

javascript - opentok-react-native 订阅者使 Android 应用程序崩溃

android - 自定义(圆形)切换按钮

c# - 如何从 ViewModel 中删除方法的执行 - Xamarin.Forms - MVVM

c# - 如何拦截 xamarin 表单的后退按钮?