我有音乐播放器应用程序,当应用程序进入后台时,它会在锁定屏幕上显示音乐控制,在我的情况下,目前正在播放广播艺术家和歌曲。我使用以下内容:
- (void)applicationWillResignActive:(UIApplication *)application {
[[PlayerManager sharedInstance] setupInfoForLockerScreen];
}
-(void)setupInfoForLockerScreen{
MPNowPlayingInfoCenter *infoCenter = [MPNowPlayingInfoCenter defaultCenter];
NSString *songName = self.currentPlaylist.lastItem.track.song.length > 0 ? self.currentPlaylist.lastItem.track.song : @"";
NSString *artistName = self.currentPlaylist.lastItem.track.artist.length > 0 ? self.currentPlaylist.lastItem.track.artist : @"";
infoCenter.nowPlayingInfo = @{
MPMediaItemPropertyTitle: self.currentPlaylist.title,
MPMediaItemPropertyArtist: songName.length > 0 && artistName.length > 0 ? [NSString stringWithFormat:@"%@ - %@", songName, artistName] : @"",
MPMediaItemPropertyPlaybackDuration: @(0)
};
}
问题是,当数据发生变化且下一首歌将在广播中时,我如何告诉我的应用程序刷新自己? applicationWillResignActive
当app最初进入后台时,我猜只有一次。
答案 0 :(得分:1)
MPMusicPlayerController
类有一些方法和事件可以帮助解决这个问题。
首先,您需要告诉您的应用程序监听MPMusicPlayerControllerNowPlayingItemDidChangeNotification事件:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNowPlayingItemChangedEvent:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:self.myMusicPlayer];
这会注册一个事件处理程序,只要当前正在播放的歌曲发生变化就会被调用。
然后调用MPMusicPlayerController上的beginGeneratingPlaybackNotifications
方法告诉它开始向您发送回放通知。
[self.myMusicPlayer beginGeneratingPlaybackNotifications];
您可以根据需要通过调用beginGeneratingPlaybackNotifications
和endGeneratingPlaybackNotifications
来控制何时收到通知以及何时不通知。
然后创建事件处理程序。这是每次MPMusicPlayerControllerNowPlayingItemDidChangeNotification触发时都会调用的方法:
- (void)handleNowPlayingItemChangedEvent:(NSNotitication*)notification
{
// Update the lock screen info here
}
现在,只要当前播放的歌曲发生变化,您的事件处理程序就会被调用,您可以更新现在正在播放的信息。