16

我目前正在尝试弄清楚如何MPNowPlayingInfoCenter在 iOS 上的 , 中指定经过的时间。

当我开始播放时,我将经过时间设置为 0,将播放速率设置为 1。这很好用。

然后我暂停音频。MPNowPlayingInfoCenter 可以正确检测到这一点,它会暂停接口上的已用时间。

只有当我继续播放时才会出现问题:时间显示为好像它在暂停时继续播放一样。例子:

1. Start playback
2. Let it play for 10 seconds
3. Pause for 5 seconds
4. Resume playback

此时,轨迹中的实际时间为 10 秒。然而信息中心显示 15。

我尝试在暂停时将播放速率设置为 0,但这会导致奇怪的行为:显示的时间随机更改为较低的值。

另外,我真的没有机会在恢复歌曲之前更新经过的时间,因为我只有在收到play事件后才有机会这样做。

tl;dr:如何处理 MPNowPlayingInfoCenter 中的暂停及其时间功能?

4

3 回答 3

15

好吧,实际上将速率设置为 0,并在我暂停和播放时将时间重置为实际值就可以了。

于 2013-12-06T08:38:56.110 回答
1

好吧,我已经为 MPMoviePlayerPlaybackStateDidChangeNotification 通知添加了一个选择器。每当电影播放、暂停、向上/向下滑动信息中心(控制中心)时都会调用它。或者即使电影正在流式传输并且它会在接收响应时暂停/播放。

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(movieStateChange)
                                                 name:MPMoviePlayerPlaybackStateDidChangeNotification 

object:nil];

我愿意

- (void)movieStateChange{
    [self updateControlCenter];
}

这就是我的updateControlCenter,它需要已经初始化的播放信息并更新MPNowPlayingInfoPropertyElapsedPlaybackTime密钥。

- (void)updateControlCenter{
    NSMutableDictionary *nowPlayingInfo = [center.nowPlayingInfo mutableCopy];
    [nowPlayingInfo setObject:[NSNumber numberWithDouble:self.player.currentPlaybackTime] forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];
    center.nowPlayingInfo = nowPlayingInfo;
}

祝你好运!

于 2014-08-07T10:17:38.237 回答
0

我遇到了这个问题,并通过每次播放曲目时更新经过的时间来解决它。所以你的“播放”按钮应该更新信息

Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");
if (playingInfoCenter) {
    NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];
    [songInfo setObject:currentTrack.trackTitle forKey:MPMediaItemPropertyTitle];
    [songInfo setObject:currentTrack.artist forKey:MPMediaItemPropertyArtist];
    [songInfo setObject:currentTrack.albumTitle forKey:MPMediaItemPropertyAlbumTitle];
    [songInfo setObject:currentTrack.trackLength forKey:MPMediaItemPropertyPlaybackDuration];
    [songInfo setObject:currentTime forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];}
于 2015-03-07T16:46:39.933 回答