Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

remoteControlReceivedWithEvent not Called in appDelegate

Tags:

I'm having problem to control the iPhone controls with my avplayer.

if I put the function

- (void)remoteControlReceivedWithEvent:(UIEvent *)event 

in the view controller that responsible for playing the function called but only if I i'm going to background in the current view controller.

if i'm going to background from other view controller the function never called.

that's why i want to put it in the app delegate.

I tried Becomefirstresponse and to put the function in every view controller but it did help.

also I call

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

in the

-(void)applicationWillResignActive:(UIApplication *)application 

thanks

like image 759
Janub Avatar asked Aug 08 '12 10:08

Janub


2 Answers

I have used below code to iPhone Control -

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; 

Used to get register for listening the remote control. Once done remove it -

[[UIApplication sharedApplication] endReceivingRemoteControlEvents]; [self resignFirstResponder]; 

make the App canBecomeFirstResponder-

- (BOOL)canBecomeFirstResponder {     return YES; } 

Used delegate method to handle iPhone control, like play and pause while doble tap on the home button

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {     //if it is a remote control event handle it correctly     if (event.type == UIEventTypeRemoteControl) {         if (event.subtype == UIEventSubtypeRemoteControlPlay) {            [audioPlayer play];             NSLog(@"play");         } else if (event.subtype == UIEventSubtypeRemoteControlPause) {            [audioPlayer stop];              NSLog(@"pause");         } else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) {             NSLog(@"toggle");         }     } } 

In my case i am able to handle play and pause.Please let know if any thing wrong.

like image 138
Sanoj Kashyap Avatar answered Sep 28 '22 07:09

Sanoj Kashyap


You can move the function up the responder chain, to UIApplication subclass. This way, it will always be there to catch the event.

This kind of event is ignored in common UI and controller classes, so it travels up to the bottom of responder chain, where your app delegate and the the application itself reside.

As noted here, UIApplication's delegate is not part of responder chain (I was wrong here). UIApplication is there, so is root UIWidow, all the views in chain and corresponding UIViewControllers.

like image 21
Farcaller Avatar answered Sep 28 '22 06:09

Farcaller