How can we handle headphone play/pause button events in foreground in ios
Asked Answered
H

3

9

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.

Heterochromosome answered 15/3, 2013 at 4:10 Comment(0)
B
13

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

[[MPRemoteCommandCenter sharedCommandCenter].togglePlayPauseCommand addTarget:self action:@selector(onTooglePlayPause)];
Baleful answered 27/7, 2015 at 9:37 Comment(0)
R
12

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/

Rafaellle answered 15/3, 2013 at 5:22 Comment(2)
thanks for your reply, however I am able to handle the events in background also I have added the UIBackgroundModes in plist but I have no idea about foreground events handling. I have tried trigging the mentioned method '- (void)remoteControlReceivedWithEvent:(UIEvent *)theEvent ' but no luck. Can you please explain me how can we add foreground keys in plist.Heterochromosome
After 2 min, if press on headphone button, Music app started and play previous sound.Brawny
R
4

The swift 2 version for slobodans solution:

MPRemoteCommandCenter.sharedCommandCenter().togglePlayPauseCommand.addTarget(self, action: #selector(togglePlayStop(_:)));
Regulus answered 17/6, 2016 at 7:4 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.