1

我在我的项目中使用 Apple 提供的 SpeakHere 示例代码。

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

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

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

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

4

2 回答 2

1

这是一个耳机/配件检测方法从这里被盗/借来检测耳机(不是麦克风)是否插入了 iOS 设备

在下面的方法中使用这个和 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;
}
于 2013-07-12T23:14:05.110 回答
1

这很可能是您正在寻找的内容:

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

来自文档:指定在未连接其他音频路由(例如耳机)时是否将音频路由到扬声器(而不是接收器)。

于 2013-07-16T22:13:19.680 回答