Iphone 未调用AVAudio中的remoteControlReceivedWithEvent

Iphone 未调用AVAudio中的remoteControlReceivedWithEvent,iphone,avaudioplayer,Iphone,Avaudioplayer,我正在开发一个在后台播放音频的应用程序。我已经按照应用程序文档的指示编写了iPod控件的代码。我是这样实现的 - (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent { if (receivedEvent.type == UIEventTypeRemoteControl) { switch (receivedEvent.subtype) { case UIEv

我正在开发一个在后台播放音频的应用程序。我已经按照应用程序文档的指示编写了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;
}


请告诉我我还需要什么,或者我在哪里犯了错误。问候

是否将UIBackgroundModes音频键添加到info.plist?请参阅。

除了将
ui背景模式
音频键添加到应用程序的
info.plist
之外,我还添加了:

-(void)viewDidLoad
{
    UIDevice* device = [UIDevice currentDevice];

    BOOL backgroundSupported = NO;

    if ([device respondsToSelector:@selector(isMultitaskingSupported)])
    {
        backgroundSupported = device.multitaskingSupported;
    }

。。。您的代码…

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

- (BOOL)canBecomeFirstResponder {
     return YES;
}

我花了几个小时试图解决这个问题,直到我发现了这个类似的问题:

我的问题是,为了让背景音频正常工作,我启用了混音覆盖:

UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,
                     sizeof (doSetProperty), &doSetProperty);

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

在Swift 3中,请确保:

override var canBecomeFirstResponder: Bool {

    get {

        return true
    }
}
override var canBecomeFirstResponder: Bool {

    get {

        return true
    }
}