From b3c3bf6062841e2e6ad62d0e47fb4bfa89834f14 Mon Sep 17 00:00:00 2001 From: Michal Zelinka Date: Wed, 26 Jul 2017 19:05:13 +0200 Subject: [PATCH] Drop remote `UIEvents` in favour of `MPRemoteCommandCenter` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit – this move fixes compatibility with iOS 11 – mainly allows the Command Centre and Lock Screen audio widgets to work with the implementing app properly again – `MPRemoteCommandCenter` is available since iOS 7.1 --- Example/ViewController.m | 4 - .../GVMusicPlayerController.h | 1 - .../GVMusicPlayerController.m | 79 ++++++++----------- 3 files changed, 33 insertions(+), 51 deletions(-) diff --git a/Example/ViewController.m b/Example/ViewController.m index 007948c..b176016 100755 --- a/Example/ViewController.m +++ b/Example/ViewController.m @@ -79,10 +79,6 @@ - (BOOL)canBecomeFirstResponder { return YES; } -- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent { - [[GVMusicPlayerController sharedInstance] remoteControlReceivedWithEvent:receivedEvent]; -} - #pragma mark - IBActions - (IBAction)playButtonPressed { diff --git a/GVMusicPlayerController/GVMusicPlayerController.h b/GVMusicPlayerController/GVMusicPlayerController.h index f357ff4..a70f17b 100755 --- a/GVMusicPlayerController/GVMusicPlayerController.h +++ b/GVMusicPlayerController/GVMusicPlayerController.h @@ -36,7 +36,6 @@ - (void)addDelegate:(id)delegate; - (void)removeDelegate:(id)delegate; -- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent; - (void)setQueueWithItemCollection:(MPMediaItemCollection *)itemCollection; - (void)setQueueWithQuery:(MPMediaQuery *)query; diff --git a/GVMusicPlayerController/GVMusicPlayerController.m b/GVMusicPlayerController/GVMusicPlayerController.m index 0bc073a..42f4fce 100755 --- a/GVMusicPlayerController/GVMusicPlayerController.m +++ b/GVMusicPlayerController/GVMusicPlayerController.m @@ -113,6 +113,9 @@ - (instancetype)init { selector:@selector(handle_VolumeChanged:) name:MPMusicPlayerControllerVolumeDidChangeNotification object:[MPMusicPlayerController iPodMusicPlayer]]; + + // Register for Control Center events + [self registerCommandCenterEvents]; } return self; @@ -439,59 +442,43 @@ - (void)endInterruptionWithFlags:(NSUInteger)flags { self.interrupted = NO; } -#pragma mark - Other public methods - -- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent { - if (receivedEvent.type != UIEventTypeRemoteControl) { - return; - } +#pragma mark - Music Player Remote Command Center - switch (receivedEvent.subtype) { - case UIEventSubtypeRemoteControlTogglePlayPause: { - if (self.playbackState == MPMusicPlaybackStatePlaying) { - [self pause]; - } else { - [self play]; - } - break; - } - - case UIEventSubtypeRemoteControlNextTrack: - [self skipToNextItem]; - break; - - case UIEventSubtypeRemoteControlPreviousTrack: - [self skipToPreviousItem]; - break; - - case UIEventSubtypeRemoteControlPlay: - [self play]; - break; +- (void)registerCommandCenterEvents +{ + MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter]; - case UIEventSubtypeRemoteControlPause: - [self pause]; - break; + [commandCenter.playCommand addTargetWithHandler: + ^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) { + [self play]; return MPRemoteCommandHandlerStatusSuccess; + }]; - case UIEventSubtypeRemoteControlStop: - [self stop]; - break; + [commandCenter.pauseCommand addTargetWithHandler: + ^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) { + [self pause]; return MPRemoteCommandHandlerStatusSuccess; + }]; - case UIEventSubtypeRemoteControlBeginSeekingBackward: - [self beginSeekingBackward]; - break; + [commandCenter.stopCommand addTargetWithHandler: + ^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) { + [self stop]; return MPRemoteCommandHandlerStatusSuccess; + }]; - case UIEventSubtypeRemoteControlBeginSeekingForward: - [self beginSeekingForward]; - break; + [commandCenter.togglePlayPauseCommand addTargetWithHandler: + ^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) { + if (self.playbackState == MPMusicPlaybackStatePlaying) + [self pause]; else [self play]; + return MPRemoteCommandHandlerStatusSuccess; + }]; - case UIEventSubtypeRemoteControlEndSeekingBackward: - case UIEventSubtypeRemoteControlEndSeekingForward: - [self endSeeking]; - break; + [commandCenter.nextTrackCommand addTargetWithHandler: + ^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) { + [self skipToNextItem]; return MPRemoteCommandHandlerStatusSuccess; + }]; - default: - break; - } + [commandCenter.previousTrackCommand addTargetWithHandler: + ^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) { + [self skipToPreviousItem]; return MPRemoteCommandHandlerStatusSuccess; + }]; } @end