Обновить состояние приложения, работающее в фоновом режиме
У меня есть приложение музыкального плеера, и когда приложение переходит в фоновый режим, оно показывает управление музыкой на заблокированном экране, в моем случае в настоящее время играет на радио-исполнителе и песне. Я использую следующее:
- (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
Я думаю, вызывается только один раз, когда приложение изначально переходит в фоновый режим.
1 ответ
MPMusicPlayerController
класс имеет несколько методов и событий, чтобы помочь с этим.
Сначала необходимо указать приложению прослушивать событие MPMusicPlayerControllerNowPlayingItemDidChangeNotification:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNowPlayingItemChangedEvent:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:self.myMusicPlayer];
Это регистрирует обработчик события, который вызывается при изменении текущей воспроизводимой песни.
Затем позвоните beginGeneratingPlaybackNotifications
метод на вашем MPMusicPlayerController, чтобы сказать ему, чтобы начать отправлять вам уведомления о воспроизведении.
[self.myMusicPlayer beginGeneratingPlaybackNotifications];
Вы можете контролировать, когда вы хотите получать уведомления, а когда нет, позвонив beginGeneratingPlaybackNotifications
а также endGeneratingPlaybackNotifications
по мере необходимости.
Затем создайте обработчик событий. Этот метод будет вызываться каждый раз, когда срабатывает MPMusicPlayerControllerNowPlayingItemDidChangeNotification:
- (void)handleNowPlayingItemChangedEvent:(NSNotitication*)notification
{
// Update the lock screen info here
}
Теперь, когда меняется текущая воспроизводимая песня, будет вызван ваш обработчик событий, и вы сможете обновить информацию, воспроизводимую сейчас.