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;
}
Когда я устанавливаю соединение VOIP без использования TelecomManager. Все работает нормально. Поэтому я считаю, что что-то пойдет не так, когда я добавляю и принимаю звонок.
Спасибо за любую идею или исправление.
AudioFocusRequest
, и в вашем случае это будет уместно для голосовой связиAudioAttribute
с запросом. Я немного просмотрел код opentok и не вижу нигде, где вам нужен Audio Focus. Так что вам, вероятно, придется запросить это самостоятельно, прежде чем добавлять вызов. Вы также можете использовать это, чтобы определить, действительно ли ваше приложение теряет фокус звука, хотя фокус звука изменяется в слушателе. - person Cheesebaron   schedule 25.06.2020