是否可以通过编程方式将音频输出重定向到iOS中的手机扬声器或耳机

时间:2014-03-21 05:15:57

标签: ios iphone audio

我正在开发一个应用程序,我想将音频输出重定向到手机扬声器,但我不知道如何以编程方式执行此操作。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您无法通过应用打开/关闭扬声器。但是,您可以感知设备的静音开关。通过这个你可以知道扬声器的当前状态。 This Question会引导您找到解决方案。

为了完整起见,让我在这里粘贴答案..

// "Ambient" makes it respect the mute switch
// Must call this once to init session
if (!gAudioSessionInited)
{
    AudioSessionInterruptionListener    inInterruptionListener = NULL;
    OSStatus    error;
    if ((error = AudioSessionInitialize (NULL, NULL, inInterruptionListener, NULL)))
    {
        NSLog(@"*** Error *** error in AudioSessionInitialize: %d.", error);
    }
    else
    {
        gAudioSessionInited = YES;
    }
}

SInt32  ambient = kAudioSessionCategory_AmbientSound;
if (AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (ambient), &ambient))
{
    NSLog(@"*** Error *** could not set Session property to ambient.");
}

<强>更新  您需要覆盖AudioRoute才能在插入耳机时打开扬声器。请使用以下代码。

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

确保在Xcode中包含AudioToolbox库。我认为它会解决你的问题..

如果需要更多信息,请告诉我.. :)

答案 1 :(得分:0)

 -(IBAction)playAUdio
{
    if(ishandset)
    {

        AVAudioSession* session = [AVAudioSession sharedInstance];
        BOOL success;
        NSError* error;
        success = [session setCategory:AVAudioSessionCategoryPlayAndRecord
                                 error:&error];
              success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
                                             error:&error];
        success = [session setActive:YES error:&error];


    }
    else
    {

        UInt32 audioRouteOverride = kAudioSessionOutputRoute_Headphones;
        AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);

           }
    ishandset=!ishandset;
}