Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpeakHere语音记录器应用程序扬声器不工作-iOS_Ios_Avaudiosession_Voice Recording - Fatal编程技术网

SpeakHere语音记录器应用程序扬声器不工作-iOS

SpeakHere语音记录器应用程序扬声器不工作-iOS,ios,avaudiosession,voice-recording,Ios,Avaudiosession,Voice Recording,我在我的项目中使用了苹果公司提供的SpeakHere示例代码 如果未插入耳机或耳机,如何启用扬声器 我知道我可以使用以下代码覆盖路由 OSStatus error; UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; error = AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof (audioRouteOver

我在我的项目中使用了苹果公司提供的SpeakHere示例代码

如果未插入耳机或耳机,如何启用扬声器

我知道我可以使用以下代码覆盖路由

OSStatus error;
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
error = AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof (audioRouteOverride), &audioRouteOverride);
if (error) printf("couldn't set audio speaker!");

但我不想这样,因为如果插入耳机,声音应该会从耳机中传出。

这里有一个耳机/配件检测方法,是从这里偷来的/借来的

在下面的方法中使用此语句和if语句将得到结果

 - (BOOL)isHeadsetPluggedIn {
    UInt32 routeSize = sizeof (CFStringRef);
    CFStringRef route;

    OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
                                              &routeSize,
                                              &route);

    /* Known values of route:
     * "Headset"
     * "Headphone"
     * "Speaker"
     * "SpeakerAndMicrophone"
     * "HeadphonesAndMicrophone"
     * "HeadsetInOut"
     * "ReceiverAndMicrophone"
     * "Lineout"
     */

    if (!error && (route != NULL)) {

        NSString* routeStr = (NSString*)route;

        NSRange headphoneRange = [routeStr rangeOfString : @"Head"];

        if (headphoneRange.location != NSNotFound) return YES;

    }

    return NO;
}

很可能这就是您要寻找的:

    UInt32 overrideValue = 1;
    AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(overrideValue), &overrideValue);

从文档中:指定在没有连接其他音频路由(如耳机)时,是否将音频路由到扬声器(而不是接收器)。

查看第17页的答案yeah。。工作得很好。。但这一次,即使设备处于静音状态,扬声器也会不断发出声音。以前从未注意到这一点,但苹果应用程序也会这样做-音乐播放器和语音备忘录都会继续在静音模式下播放。谢谢你的回答。。你能检查一下我关于SpeakHere示例的其他问题吗。。静音模式操作实际上由音频会话类别控制。由于应用程序的主要功能是播放音频,因此播放和录制将覆盖静音模式。有关更多信息,请参阅文档。