这是我的第一个帖子,问一个问题,因为我通常从不需要帮助,但我不知道这是否有可能。我需要的是在这两个类别的avaudiosession之间切换
当应用程序从允许混合切换到禁止混合切换时,请收回控制中心中的遥控器。
和
虐待尝试解释发生了什么:
它们都独立工作,因此,如果我从第一个avaudiosession配置开始,它将允许混合并正确地将控制中心中的遥控器切换到iPod。
而且,如果我启动第二个avaudiosession配置,则该应用正确地控制了控制中心中的遥控器。
当我尝试切换这些选项时,会发生此问题。当我切换时,关闭混音后,该应用程序不会重新控制遥控器。
任何帮助将不胜感激
最佳答案
我找到了适合我的解决方案,其中涉及致电
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]
要么
[[UIApplication sharedApplication] endReceivingRemoteControlEvents]
在设置AVAudioSession类别选项之前。例如:
NSUInteger options = ... // determine your options
// it seems that calls to beginReceivingRemoteControlEvents and endReceivingRemoteControlEvents
// need to be balanced, so we keep track of the current state in _isReceivingRemoteControlEvents
BOOL shouldBeReceivingRemoteControlEvents = ( 0 == (options & AVAudioSessionCategoryOptionMixWithOthers) );
if(_isReceivingRemoteControlEvents != shouldBeReceivingRemoteControlEvents) {
if(shouldBeReceivingRemoteControlEvents) {
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
_isReceivingRemoteControlEvents=YES;
} else {
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
_isReceivingRemoteControlEvents=NO;
}
}
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:options error:&error];
...
[[AVAudioSession sharedInstance] setActive:YES error:&error]
通过使用变量来跟踪应用程序当前是否正在接收远程控制事件,我已经能够获得一致的结果,从而可以确保对(begin / end)ReceivingRemoteControlEvents的调用保持平衡。我还没有找到任何文档说明您需要执行此操作,但是否则事情似乎并不总是按预期运行,特别是因为在整个应用程序过程中我多次调用了此代码。
在我的实现中,上面的代码在应用程序每次进入前台时以及在我每次开始播放音频之前都被调用。
我希望这有帮助。
关于ios - 切换avaudiosession类别,然后重新控制远程控制中心控件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24625510/