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]; }