开发者

Unable to handle remote control events for backgronud audio

In the view controller for my audio player I've added this:

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}

- (void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
    [self resignFirstResponder];
}

- (BOOL)canBecomeFirstResponder {
    return YES;
}

This switches the icon in the player controls from the iPod icon to my own app, it also puts the little playback icon in the status bar.

Next I added this to my view controller to handle the remote events:

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
    NSLog(@"REMOTE EVENT!");
    switch (event.subtype) {
        case UIEventSubtypeRemoteControlTogglePlayPause:
            [streamer pause];
            break;
        case UIEventSubtypeRemoteControlPlay:
            [streamer start];
            break;
        case UIEventSubtypeRemoteControlPause:
            开发者_高级运维[streamer pause];
            break;
        case UIEventSubtypeRemoteControlStop:
            [streamer stop];
            break;
        default:
            break;
    }
}

However, this is never called. I tried bringing up the playback controls while the app was running, I tried going back to my home screen and tapping some playback controls, and I tried my earbuds' controls. All had no luck.

Does anyone have any pointers as to where I can be going wrong?

Thanks.


You have implemented the wrong method: instead of - (void) viewWillAppear:(BOOL)animated it should have been - (void)viewDidAppear:(BOOL)animated.


I ran into this problem before and discovered that in my problem it was because my view was a subview and the parent was catching the remote events. I would start in the AppDelegate and implement the method and see if anything is being sent to the AppDelegate and then trace it down from there. Chances are there is a view or viewController that is catching the event and not passing it along.


Have you made sure to set your audio session? Use AVAudioSession and set the category to AVAudioSessionCategoryPlayback before becoming first responder.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜