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
在iOS创建的应用程序中,通过扬声器强制音频输出,但不';应用程序在后台时无法工作_Ios_Objective C_Audio_Avaudiosession - Fatal编程技术网

在iOS创建的应用程序中,通过扬声器强制音频输出,但不';应用程序在后台时无法工作

在iOS创建的应用程序中,通过扬声器强制音频输出,但不';应用程序在后台时无法工作,ios,objective-c,audio,avaudiosession,Ios,Objective C,Audio,Avaudiosession,我想实现,当我在iPhone中插入耳机/耳机并播放任何音乐时,应该从扬声器而不是耳机播放音乐。 所以当我的应用程序在前台时,使用下面的代码可以很好地工作。但当我的应用程序在后台运行时,这段代码不起作用 我想在3种情况下实现这个功能 当应用程序位于前台时 当应用程序处于后台时 当应用程序从后台删除时 请给我一个解决方案 我使用了下面的代码 + (void) initAudioSessionRouting{ // Called once to route all audio thr

我想实现,当我在iPhone中插入耳机/耳机并播放任何音乐时,应该从扬声器而不是耳机播放音乐。 所以当我的应用程序在前台时,使用下面的代码可以很好地工作。但当我的应用程序在后台运行时,这段代码不起作用

  • 我想在3种情况下实现这个功能
  • 当应用程序位于前台时
  • 当应用程序处于后台时
  • 当应用程序从后台删除时
请给我一个解决方案

我使用了下面的代码

 + (void) initAudioSessionRouting{

    // Called once to route all audio through speakers, even if something's plugged into the headphone jack
    static BOOL audioSessionSetup = NO;
    if (audioSessionSetup == NO) {

        // set category to accept properties assigned below
        NSError *sessionError = nil;
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: &sessionError];

        // Doubly force audio to come out of speaker
        UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
        AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);

        // fix issue with audio interrupting video recording - allow audio to mix on top of other media
        UInt32 doSetProperty = 1;
        AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);

        // set active
        [[AVAudioSession sharedInstance] setDelegate:self];
        [[AVAudioSession sharedInstance] setActive: YES error: nil];

        // add listener for audio input changes
        AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange, onAudioRouteChange, nil );
        AudioSessionAddPropertyListener (kAudioSessionProperty_AudioInputAvailable, onAudioRouteChange, nil );

    }

    // Force audio to come out of speaker
    [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
    // set flag
    audioSessionSetup = YES;}

提前感谢

您的应用程序不控制音频。控制服务优先选择前台应用程序,因此当您的应用程序位于后台时,它不会产生任何影响。真的,这是件好事。如果我已插入耳机,我不希望从其他任何地方接收音频。@Avi u r right。但我想,当耳机插入iPhone时,实用地改变内置耳机的设置,使任何声音或音乐都能在扬声器中自动播放,你知道我该如何实现吗?@monikaptel确实找到了解决方案。我也面临着同样的问题