AVAudio中的remoteControlReceivedWithEvent未被调用

eng*_*f4u 3 iphone avaudioplayer

我正在开发一个在后台播放音频的应用程序.我按照app docs的指示编写了iPod控件的代码.我已经实现了这个

- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {    
    if (receivedEvent.type == UIEventTypeRemoteControl) {

        switch (receivedEvent.subtype) {

            case UIEventSubtypeRemoteControlTogglePlayPause:
                [self playButtonPressed:playButton];
                [self testing];
                break;

            case UIEventSubtypeRemoteControlPreviousTrack:
                [self rewButtonReleased:(UIButton *)rewButton];
                break;

            case UIEventSubtypeRemoteControlNextTrack:
                [self ffwButtonReleased:(UIButton *)ffwButton];
                break;

            default:
                break;
        }
    }
}
- (BOOL)canBecomeFirstResponder {
    NSLog(@"canBecomeFirstResponder");
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

- (void) viewDidAppear:(BOOL)animated 
{
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){
        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
        [self becomeFirstResponder];
    }
}

- (void) viewWillDisappear:(BOOL)animated 
{
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
    [self resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

请告诉我我还需要什么,或者我在哪里犯任何错误.问候!

Mar*_*ano 9

只要确保它可以成为第一响应者

- (BOOL)canBecomeFirstResponder {
     return YES;
}
Run Code Online (Sandbox Code Playgroud)


Mik*_*ler 5

我花了好几个小时试图解决同样的问题,直到我发现了类似的问题:如何在应用程序中接收远程控制事件的同时播放iPod应用程序中的音乐?

我的问题是我正在启用混音覆盖以尝试使背景音频工作:

UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,
                     sizeof (doSetProperty), &doSetProperty);
Run Code Online (Sandbox Code Playgroud)

我删除了这些行(原来它们不是背景音频所必需的),并remoteControlReceivedWithEvent开始工作.这有点道理.如果您指定您的应用程序应该能够将其音频与当前在其他应用程序中播放的任何内容混合(例如,将应用程序的声音效果与iPod应用程序的音乐混合),那么其他应用程序应该保留按下遥控器按钮的优先级.