gpt4 book ai didi

ios - beginReceivingRemoteControlEvents 不触发 Apple Music 的事件

转载 作者:可可西里 更新时间:2023-11-01 03:20:44 24 4
gpt4 key购买 nike

我正在从我的应用程序播放 Apple Music,Apple 音乐播放器代码如下 -

-(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];
}

}

效果很好。现在我想从锁定屏幕控制轨道,为此我在 viewWillAppear

中做了以下代码
  [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[APP_DELEGATE becomeFirstResponder];

remoteControlReceivedWithEvent方法写在AppDelegate文件中如下-

-(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;
}
}

注意 - remoteControlReceivedWithEvent 每次在 iTunes 轨道由 AVPlayerSpotify 播放时触发 轨道由 Spotify iOS SDK 播放。

但在播放 Apple Music 轨道时不会触发相同的代码 -

[MPMusicPlayerController applicationMusicPlayer]      

or

[MPMusicPlayerController systemMusicPlayer]

任何帮助将不胜感激。谢谢

最佳答案

不是使用 -(void)remoteControlReceivedWithEvent:(UIEvent *)event 来跟踪控件,而是使用 MPRemoteCommandCenter 向每个控件添加目标:

Note: It's important to enable the controls before assigning a target.

[MPRemoteCommandCenter sharedCommandCenter].playCommand.enabled = YES;
[[MPRemoteCommandCenter sharedCommandCenter].playCommand addTarget:self action:@selector(remotePlay)];

[MPRemoteCommandCenter sharedCommandCenter].pauseCommand.enabled = YES;
[[MPRemoteCommandCenter sharedCommandCenter].pauseCommand addTarget:self action:@selector(remoteStop)];

[MPRemoteCommandCenter sharedCommandCenter].previousTrackCommand.enabled = YES;
[[MPRemoteCommandCenter sharedCommandCenter].previousTrackCommand addTarget:self action:@selector(loadPreviousSong)];

[MPRemoteCommandCenter sharedCommandCenter].nextTrackCommand.enabled = YES;
[[MPRemoteCommandCenter sharedCommandCenter].nextTrackCommand addTarget:self action:@selector(loadNextSong)];

选择器:

-(void) remotePlay {
[APP_DELEGATE PlayPauseMusic:nil];
}
-(void) remoteStop {
[APP_DELEGATE PlayPauseMusic:nil];
}
-(void) loadNextSong {
[APP_DELEGATE next:nil];
}
-(void) loadPreviousSong {
[APP_DELEGATE previous:nil];
}

关于ios - beginReceivingRemoteControlEvents 不触发 Apple Music 的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36834164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com