Sprite Kit声音问题,如何防止停止用户声音

tei*_*eix 4 ios avplayer ios7

我在使用Sprite Kit时遇到问题,当我想在用户交互后播放声音时.

用户正在使用应用程序(例如Spotify)收听音乐.
用户想要在他的歌曲中播放我的游戏,目前当使用启动我的应用程序时,他的歌曲就会停止.

我想防止这种行为,事实上:如果其他应用程序正在使用"声音",或者如何播放我的声音并保持用户的音乐播放,我该怎么办才能播放声音.

目前这是我的代码:

@property (strong, nonatomic) SKAction *hitSound;
Run Code Online (Sandbox Code Playgroud)

在init方法中:

 _hitSound = [SKAction playSoundFileNamed:@"laugh.caf" waitForCompletion:NO];
Run Code Online (Sandbox Code Playgroud)

用户按下屏幕后:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
 SKAction *sequence = [SKAction sequence:@[_hitSound]];
    [node runAction:sequence completion:^{
       //Stuff
}];
Run Code Online (Sandbox Code Playgroud)

}

Bam*_*rld 6

您的应用程序需要管理允许后台音频继续播放的AVAudioSession.这将允许后台音频应用程序继续播放,您的应用程序声音将与它混合.

AVAudioSession类是一个单例类,并且是基于部分AVFoundation框架.务必将AVFoundation链接到目标.在需要它的类中导入框架.

#import <AVFoundation/AVFoundation.h>
Run Code Online (Sandbox Code Playgroud)

声明应用程序音频会话的好地方在应用程序委托中,因此可以在应用程序中放置以下代码:didFinishLaunchingWithOptions: method.

// activate a mixable session
// set audio session category AVAudioSessionCategoryPlayback

     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
     [[AVAudioSession sharedInstance] setMode:AVAudioSessionModeDefault error:nil];
     [[AVAudioSession sharedInstance] setActive:YES error: nil];
Run Code Online (Sandbox Code Playgroud)

就你自己的应用程序听起来或不播放而言,一种可能性是将BOOL类型的属性命名为'mute'并检查是否需要SKAction来播放音频.您可以检查是否正在播放背景音频并相应地设置"静音"属性.您还可以决定为设置此属性的用户提供界面.可能性很多.

您可以检查背景音频是否像这样播放 -

BOOL isPlayingAudio = [[AVAudioSession sharedInstance] otherAudioPlaying];
Run Code Online (Sandbox Code Playgroud)

从这里开始,您的代码可以决定将self.mute设置为什么.

AVAudioSession类参考这里找到- AVAudioSession类参考