8

在(SpriteKit)游戏运行时,我一直在玩电话以测试中断。我正在使用 ObjectAL 文档中的示例,名为:“使用 OpenAL 对象和 OALAudioTrack”

所以,我让图书馆自动处理这个......

[OALAudioSession sharedInstance ]. handleInterruptions = YES

它有效,但部分有效。例如,通过 3 种声音的简单设置,我会收到下一条错误消息:

OALAudioSession activateAudioSession]:2 次尝试后无法激活音频会话:错误域 = NSOSStatusErrorDomain 代码 = 561015905“操作无法完成。(OSStatus 错误 561015905。)”

Error 561015905 == 0x21706C61 == !pla,并引用在 AVAudioSession.h 中声明的错误:

AVAudioSessionErrorCodeCannotStartPlaying = '!pla', /* 0x21706C61, 561015905

实际上这是可行的,有两次失败的尝试,第三次成功,没有什么可以注意到,因为一切都很快,一切似乎都在正常工作。

我注意到,如果我添加更多声音(比如说 20),我会收到相同的消息:

尝试 20 次后无法激活音频会话:

之后,会话被激活。然后,我只是在相关方法中添加了调试消息:

OALAudioSession.m

- (void) activateAudioSession
{
    NSError* error;
    for(int try = 1; try <= kMaxSessionActivationRetries; try++)
    {
        if([[AVAudioSession sharedInstance] setActive:YES error:&error])
        {

            NSLog(@"Session activated after %d", try);

            audioSessionActive = YES;
            return;
        }
        OAL_LOG_ERROR(@"Could not activate audio session after %d tries: %@", try, error);
        [NSThread sleepForTimeInterval:0.2];
    }
    OAL_LOG_ERROR(@"Failed to activate the audio session");
}  

所以,最后,在 20 次不成功的尝试后,我收到一条消息:“21 次尝试后会话已激活”

但是因为 kMaxSessionActivationRetries 设置为 40,最终声音播放会“中断”,因为尝试次数很容易超过允许的 40 次尝试。我知道我可以更改此值,但这实际上并不能解决问题。

我在这里错过了什么重要的东西吗?我认为当handleInterruptions属性设置为 YES 时,我们不必进行任何手动中断/会话处理?如果这很重要,我正在 iPhone 6 和 iOS8 上进行测试。任何人都可以对此有所了解吗?

4

0 回答 0