刷新在后台运行的应用程序状态

时间:2017-05-05 06:09:03

标签: ios objective-c uiapplication

我有音乐播放器应用程序,当应用程序进入后台时,它会在锁定屏幕上显示音乐控制,在我的情况下,目前正在播放广播艺术家和歌曲。我使用以下内容:

- (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最初进入后台时,我猜只有一次。

1 个答案:

答案 0 :(得分:1)

MPMusicPlayerController类有一些方法和事件可以帮助解决这个问题。

首先,您需要告诉您的应用程序监听MPMusicPlayerControllerNowPlayingItemDidChangeNotification事件:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNowPlayingItemChangedEvent:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:self.myMusicPlayer];

这会注册一个事件处理程序,只要当前正在播放的歌曲发生变化就会被调用。

然后调用MPMusicPlayerController上的beginGeneratingPlaybackNotifications方法告诉它开始向您发送回放通知。

[self.myMusicPlayer beginGeneratingPlaybackNotifications];

您可以根据需要通过调用beginGeneratingPlaybackNotificationsendGeneratingPlaybackNotifications来控制何时收到通知以及何时不通知。

然后创建事件处理程序。这是每次MPMusicPlayerControllerNowPlayingItemDidChangeNotification触发时都会调用的方法:

- (void)handleNowPlayingItemChangedEvent:(NSNotitication*)notification
{
    // Update the lock screen info here
}

现在,只要当前播放的歌曲发生变化,您的事件处理程序就会被调用,您可以更新现在正在播放的信息。