gpt4 book ai didi

ios - 扬声器的 CallKit 问题,接听电话后自动打开

转载 作者:搜寻专家 更新时间:2023-11-01 07:02:47 24 4
gpt4 key购买 nike

我正在使用 CallKitTokBox以及它是如何处理一个错误的,即接听电话后,扬声器变为事件状态并且无法通过点击它来禁用。通话从主动扬声器开始,我认为这是一个错误,但 WhatsApp 和 FBMassenger 在他们的自定义调用屏幕 View 中使用了相同的功能,但他们的扬声器在接到电话后变得不活动,我搜索了这个电话但没有找到相关答案所以远。

TokBox他们提供了OTDefaultAudioDevice.hOTDefaultAudioDevice.m他们使用 CallKitSpeakerBox 配置所有关于音频的文件.我在哪里找到以下配置:

#define AUDIO_DEVICE_HEADSET     @"AudioSessionManagerDevice_Headset"
#define AUDIO_DEVICE_BLUETOOTH @"AudioSessionManagerDevice_Bluetooth"
#define AUDIO_DEVICE_SPEAKER @"AudioSessionManagerDevice_Speaker"

已按以下方式使用:

- (BOOL)configureAudioSessionWithDesiredAudioRoute:(NSString*)desiredAudioRoute
{
OT_AUDIO_DEBUG(@"configureAudioSessionWithDesiredAudioRoute %@",desiredAudioRoute);

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err;

//ios 8.0 complains about Deactivating an audio session that has running
// I/O. All I/O should be stopped or paused prior to deactivating the audio
// session. Looks like we can get away by not using the setActive call
if (SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(@"7.0")) {
// close down our current session...
[audioSession setActive:NO error:nil];
}

if ([AUDIO_DEVICE_BLUETOOTH isEqualToString:desiredAudioRoute]) {
[self setBluetoothAsPrefferedInputDevice];
}

if (SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(@"7.0")) {
// Set our session to active...
if (![audioSession setActive:YES error:&err]) {
NSLog(@"unable to set audio session active: %@", err);
return NO;
}
}

if ([AUDIO_DEVICE_SPEAKER isEqualToString:desiredAudioRoute]) {
// replace AudiosessionSetProperty (deprecated from iOS7) with
// AVAudioSession overrideOutputAudioPort
#if !(TARGET_OS_TV)
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&err];
#endif
} else
{
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone
error:&err];
}

return YES;
}

在哪里AVAudioSessionPortOverrideSpeaker用于所有设备,我认为这是成为启用扬声器的主要原因,尽管我不太清楚。即

if ([AUDIO_DEVICE_SPEAKER isEqualToString:desiredAudioRoute]) {
// replace AudiosessionSetProperty (deprecated from iOS7) with
// AVAudioSession overrideOutputAudioPort
#if !(TARGET_OS_TV)
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&err];
#endif
} else
{
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone
error:&err];
}
}

到目前为止,是否有人有任何建议或这里是否有人已经纠正了该状态?

我也相信许多像我一样的人正在经历这个问题。

任何帮助都将不胜感激。

谢谢

最佳答案

我已经通过了 opentok 支持,他们认真对待了这个问题,并且由于该服务仅用于视频聊天,因此他们在 CallKit UI 中启用了该扬声器。要通过使用它们的 Objective C 类即 OTDefaultAudioDevice.hOTDefaultAudioDevice.m 使其禁用或仅用于音频调用,那么我们必须在以下行中添加注释.m 文件。

audioOptions |= AVAudioSessionCategoryOptionDefaultToSpeaker;

希望它能拯救许多人。

谢谢。

关于ios - 扬声器的 CallKit 问题,接听电话后自动打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50132396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com