cocos 切后台音效失效问题 - pxqwxl/myLearnPoject GitHub Wiki

只是,iOS的状态比较多,就算是进入后台,也有WillEnterBackground, DidEnterBackground的区别,激活时,也有WillEnterForeground和DidBecomeActive的区别。cocos2d-x监控的是WillEnterForeground,这种监控大多数情况下是没有问题的。

然而,在极少数极端情况下,某个app收到WillEnterForeground并不表示它下一个状态是DidBecomeActive。如果我们在收到WillEnterForeground时,resume各种声音,但下一状态不是DidBecomeActive,就相当于在后台时播放声音,openAL失效啦!

怎么解决?把AppController.mm的WillEnterForeground函数里回调cc的WillEnterForeground这句话挪到DidBecomeActive函数里就可以了,就是这么简单!

不过,在AppController.mm的DidBecomeActive里调用cc的WillEnterForeground,这个名字怎么这么奇怪?没关系,把cc里所有的WillEnterForeground改成DidEnterForeground吧,这样看起来就顺眼多了。

Phone 5C, iPhone 6 Plus上,后台切换,有时候跟以前一样,没有音效,有背景音乐;

然后,如果关闭背景音乐再进行后台切换,这时候音效又自动回来啦,怎么回事?

经过半天的折腾,终于又改了一次CDAudioManager,继上次使用notification进行前后台切换的通知后,再调用之前被乱调用的audioSessionInterrupt, audioSessionResume,如下:

  • (void) applicationWillResignActive:(NSNotification *) notification { [self applicationWillResignActive]; [self audioSessionInterrupted]; }

  • (void) applicationDidBecomeActive:(NSNotification *) notification { [self audioSessionResumed]; [self applicationDidBecomeActive]; }