ios - Sprite Kit & 播放声音导致应用程序终止

标签 ios audio opengl-es multitasking sprite-kit

使用圆弧

只是我遇到的一个问题- 我有一个 SKScene,我在其中使用 SKAction 类方法播放声音效果

[SKAction playSoundFileNamed:@"sound.wav" waitForCompletion:NO];

现在,当我尝试进入后台时,无论声音是否结束,显然 iOS 正在终止我的应用程序,原因是 gpus_ReturnNotPermittedKillClient

现在只有当我评论这一行并且不运行操作时,iOS 才会在后台运行它(当然,暂停,但没有终止)。

我做错了什么?

编辑:如果该行未运行,iOS 将不会终止该应用程序 - 比如说,如果它在未运行的 if 语句 (soundOn == YES) 或类似的东西,当 bool 为 false

最佳答案

问题是 AVAudioSession 在应用程序进入后台时无法激活。这不是很明显,因为 Sprite Kit 没有提到它在内部使用 AVAudioSession。

修复非常简单,也适用于 ObjectAL => 在应用程序处于后台时将 AVAudioSession 设置为非事件状态,并在应用程序进入前台时重新激活 Audio Session 。

经过此修复的简化 AppDelegate 如下所示:

#import <AVFoundation/AVFoundation.h>
...

- (void)applicationWillResignActive:(UIApplication *)application
{
    // prevent audio crash
    [[AVAudioSession sharedInstance] setActive:NO error:nil];
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // prevent audio crash
    [[AVAudioSession sharedInstance] setActive:NO error:nil];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    // resume audio
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
}

PS:此修复程序将包含在 Kobold Kit 中v7.0.3.

关于ios - Sprite Kit & 播放声音导致应用程序终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18976813/

相关文章:

ios - 使用Webservice和json parse做排名

ios - 访问闭包之外的数据

ios - UITabBar 栏项图标默认是灰色的?

ios - iOS 中 NSNotificationCenter 的 If 语句

java - PCMU 到 WAV 转换

android - 如何在android Camera上设置Open GLES效果?

android - 在 Android 上使用 OpenGL ES 显示透明纹理时出现问题

C++ 音频转换(mp3 -> ogg)问题

android - 在特定时间循环播放声音

javascript - 如何在webgl中获取纹理?没有Canvas.toDataUrl()