How can we handle headphone play/pause button even

2019-03-16 01:25发布

I have an requirement that to handle headphone play/pause button events in foreground. How ever I am able to handle the same scenario in background using the below code

if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
    [self becomeFirstResponder];
    NSLog(@"Responds!");
}

Please help with an explanation or sample code if possible. I have done lots of research but no help.

3条回答
再贱就再见
2楼-- · 2019-03-16 01:51

There is another way to implement player control from headphones. use MPRemoteCommandCenter tooglePlayPauseCommand. Apple documentation

[[MPRemoteCommandCenter sharedCommandCenter].togglePlayPauseCommand addTarget:self action:@selector(onTooglePlayPause)];
查看更多
啃猪蹄的小仙女
3楼-- · 2019-03-16 02:07

You must check this criteria:

  1. Edit your info.plist to stipulate that you do audio (UIBackgroundModes) in the background as well as foreground.
  2. Implement this function:

    - (void)remoteControlReceivedWithEvent:(UIEvent *)theEvent 
    {
      if (theEvent.type == UIEventTypeRemoteControl)
      {
        switch(theEvent.subtype) {
        case UIEventSubtypeRemoteControlTogglePlayPause:
                //Insert code
                break;
            case UIEventSubtypeRemoteControlPlay:
                //Insert code
                break;
            case UIEventSubtypeRemoteControlPause:
                // Insert code
                break;
            case UIEventSubtypeRemoteControlStop:
                //Insert code.
                break;
            default:
                return;
        }
      }
    }
    

...obviously, replace the "//insert code" with whatever functionality is relevent in your app.

3>Finally, in order for that above function to be called, insert this in your viewDidAppear event:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    if ([self canBecomeFirstResponder]) {
        [self becomeFirstResponder];
    }

also please see this link: http://www.sagorin.org/2011/11/29/ios-playing-audio-in-background-audio/

查看更多
叛逆
4楼-- · 2019-03-16 02:09

The swift 2 version for slobodans solution:

MPRemoteCommandCenter.sharedCommandCenter().togglePlayPauseCommand.addTarget(self, action: #selector(togglePlayStop(_:)));
查看更多
登录 后发表回答