Обновить состояние приложения, работающее в фоновом режиме

У меня есть приложение музыкального плеера, и когда приложение переходит в фоновый режим, оно показывает управление музыкой на заблокированном экране, в моем случае в настоящее время играет на радио-исполнителе и песне. Я использую следующее:

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

Теперь, когда меняется текущая воспроизводимая песня, будет вызван ваш обработчик событий, и вы сможете обновить информацию, воспроизводимую сейчас.

Другие вопросы по тегам