ios - AVPlayer + MPNowPlayingInfoCenter 适用于模拟器,但不适用于设备

标签 ios iphone avplayer mpnowplayinginfocenter

我正在使用 AVPlayer 来再现音乐。一切在 iOS 6+ 上在模拟器上运行良好。但是当我在设备(iPhone 5s、iOS 7.1)上运行它时,MPNowPlayingInfoCenter 显示来自任何其他音乐应用程序的信息:spotify/声音云/音乐播放器,而不是我的应用程序中当前播放的项目。

这是我用来在 MPNowPlayingInfoCenter 中设置音乐信息的代码:

- (void)setupNowPlayingInfoCenter
{
    if (NSClassFromString(@"MPNowPlayingInfoCenter")) {
        // Here enters fine.
        MPNowPlayingInfoCenter *playingInfoCenter = [MPNowPlayingInfoCenter defaultCenter];

        if (self.playingUrl) {
            NSMutableDictionary *songInfo = self.songInfo;

            MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage:[self.playingObject valueForKey:@"image"]];

            [songInfo setObject:[self.playingObject valueForKey:@"song"] forKey:MPMediaItemPropertyTitle];
            [songInfo setObject:[self.playingObject valueForKey:@"artist"] forKey:MPMediaItemPropertyArtist];
            [songInfo setObject:[self.playingObject valueForKey:@"album"] forKey:MPMediaItemPropertyAlbumTitle];
            [songInfo setObject:[NSNumber numberWithDouble:self.progress] forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];
            [songInfo setObject:[NSNumber numberWithDouble:self.duration] forKey:MPMediaItemPropertyPlaybackDuration];
            [songInfo setObject:(self.isPaused ? @(0.0f) : @(1.0f)) forKey:MPNowPlayingInfoPropertyPlaybackRate];
            [songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork];

            playingInfoCenter.nowPlayingInfo = songInfo;
}

其他相关代码:

- (NSError *)initialize
{
    NSError *error = nil;
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryPlayback 
                        error:&error];
    if (error) {
        NSLog(@"%@", [error description]);
        return error;
    }
    [audioSession setActive:YES error:&error];
    if (error) {
        NSLog(@"%@", [_error description]);
        return error;
    }

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    return error;
}

任何帮助将不胜感激。

最佳答案

好吧,我自己找到了答案。

我正在为每首歌创建新的播放器,如下所示:

self.audioPlayer = [AVPlayer playerWithURL:url];

我将其更改为:

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
[self.audioPlayer replaceCurrentItemWithPlayerItem:playerItem];

神奇地,它开始起作用了。

关于ios - AVPlayer + MPNowPlayingInfoCenter 适用于模拟器,但不适用于设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418252/

相关文章:

ios - 加载 View 时倒计时图像

ios - Alamofire 对此报错

iphone - 在 iPhone 上以编程方式调用电话的局限性

iOS:AVPlayer 视频预加载

ios - Objective-C 消息被发送到已释放的 'UIActivityIndicatorView' 对象

ios - 具有后台 Audio Session 的 iphone/ios 应用程序阻止用户接听来电

objective-c - iOS 重复/僵尸 View Controller 被引用

iPhone 开发人员以编程方式设置设备方向错误

iphone - 通过 Objective-C 创建 SQLite3 数据库文件

ios - 带静态 UITableView 的 ECSlidingViewController