tôi đang chơi của Apple Âm nhạc từ ứng dụng của tôi, mã máy nghe nhạc apple là như -beginReceivingRemoteControlEvents không kích hoạt các sự kiện cho Apple Âm nhạc
-(void) submitAppleMusicTrackWithProductID: (NSString *) productID // productID in US is the last numbers after i= in the share URL from Apple Music
{
[SKCloudServiceController requestAuthorization:^(SKCloudServiceAuthorizationStatus status) {
NSLog(@"status is %ld", (long)status);
SKCloudServiceController *cloudServiceController;
cloudServiceController = [[SKCloudServiceController alloc] init];
[cloudServiceController requestCapabilitiesWithCompletionHandler:^(SKCloudServiceCapability capabilities, NSError * _Nullable error) {
NSLog(@"%lu %@", (unsigned long)capabilities, error);
if (capabilities >= SKCloudServiceCapabilityAddToCloudMusicLibrary || capabilities==SKCloudServiceCapabilityMusicCatalogPlayback)
{
NSLog(@"You CAN add to iCloud!");
[[MPMediaLibrary defaultMediaLibrary] addItemWithProductID:productID completionHandler:^(NSArray<__kindof MPMediaEntity *> * _Nonnull entities, NSError * _Nullable error)
{
NSLog(@"added id%@ entities: %@ and error is %@", productID, entities, error);
NSArray *tracksToPlay = [NSArray arrayWithObject:productID];
[[MPMusicPlayerController applicationMusicPlayer] setQueueWithStoreIDs:tracksToPlay];
[[MPMusicPlayerController applicationMusicPlayer] stop];
[[MPMusicPlayerController applicationMusicPlayer] play];
self.isTrackChangedByNextPreviousButton = NO;
[[NSNotificationCenter defaultCenter]removeObserver:self name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:nil];
[[NSNotificationCenter defaultCenter]removeObserver:self name:MPMusicPlayerControllerPlaybackStateDidChangeNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleTrackChanged:)
name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handlePlaybackStateChanged:)
name:MPMusicPlayerControllerPlaybackStateDidChangeNotification
object:nil];
[[MPMusicPlayerController applicationMusicPlayer] beginGeneratingPlaybackNotifications];
[[MPMusicPlayerController applicationMusicPlayer] setRepeatMode: MPMusicRepeatModeNone];
}];
}
else
{
NSLog(@"Blast! The ability to add Apple Music track is not there. sigh.");
}
}];
}];
}
-(void)handleTrackChanged:(id)notification
{
if (!self.AppleMusicPreviuosTrack)
{
self.AppleMusicPreviuosTrack = [[Tracks alloc] init];
}
if (self.AppleMusicPreviuosTrack.trackId == self.CurrentTrack.trackId && [MPMusicPlayerController applicationMusicPlayer].currentPlaybackRate == 0 && !self.isSongChangedManually)
{
self.isSongChangedManually = YES;
[self FilterArtistsTracks:@"next" :^(Tracks *track, NSError *err)
{
}];
}
else
{
if ([[MPMusicPlayerController applicationMusicPlayer] currentPlaybackRate]==1)
{
self.AppleMusicPreviuosTrack.trackId = self.CurrentTrack.trackId;
[[NSNotificationCenter defaultCenter] postNotificationName:kTrackChanged object:nil];
//Delay execution of my block for 20 seconds.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 30 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
self.isSongChangedManually = NO;
});
}
}
}
-(void)handlePlaybackStateChanged:(id)notification
{
NSLog(@"handle_PlaybackStateChanged");
[[NSNotificationCenter defaultCenter] postNotificationName:kDidTrackPlaybackStatus object:nil];
if ([MPMusicPlayerController applicationMusicPlayer].currentPlaybackRate>0)
{
[self.playerMenuView.playpauseButton setImage:[UIImage imageNamed:@"pause"] forState:UIControlStateNormal];
}
else
{
[self.playerMenuView.playpauseButton setImage:[UIImage imageNamed:@"play"] forState:UIControlStateNormal];
}
}
mà đang làm việc tuyệt vời. Bây giờ tôi muốn kiểm soát theo dõi từ màn hình khóa, cho điều này tôi đã sau mã trong viewWillAppear
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[APP_DELEGATE becomeFirstResponder];
và remoteControlReceivedWithEvent
phương pháp được viết bằng AppDelegate
tập tin như sau -
-(void)remoteControlReceivedWithEvent:(UIEvent *)event
{
switch (event.subtype)
{
case UIEventSubtypeRemoteControlTogglePlayPause:
[APP_DELEGATE PlayPauseMusic:nil];
//[streamer pause];
break;
case UIEventSubtypeRemoteControlPlay:
[APP_DELEGATE PlayPauseMusic:nil];
//[streamer start];
break;
case UIEventSubtypeRemoteControlPause:
[APP_DELEGATE PlayPauseMusic:nil];
//[streamer pause];
break;
case UIEventSubtypeRemoteControlStop:
[APP_DELEGATE PlayPauseMusic:nil];
//[streamer stop];
break;
case UIEventSubtypeRemoteControlNextTrack:
[APP_DELEGATE next:nil];
break;
case UIEventSubtypeRemoteControlPreviousTrack:
[APP_DELEGATE previous:nil];
break;
default:
break;
}
}
Note - Các remoteControlReceivedWithEvent
được kích hoạt mỗi lần nếu iTunes
các bản nhạc đang phát theo AVPlayer
HOẶC Spotify
các bản nhạc đang được Spotify iOS SDK phát.
Nhưng cùng một mã là không kích hoạt trong khi chơi của Apple Âm nhạc các bài hát bằng -
[MPMusicPlayerController applicationMusicPlayer]
or
[MPMusicPlayerController systemMusicPlayer]
bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn
Cũng cố gắng để con số này ra! – evenodd