xcode - MPNowPlayingInfoCenter 信息不显示在 iOS 8 上 [英] xcode - MPNowPlayingInfoCenter info is not displayed on iOS 8

查看:58
本文介绍了xcode - MPNowPlayingInfoCenter 信息不显示在 iOS 8 上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个音乐应用程序,它应该在后台播放音乐.

我使用 MPMoviePlayerController 来播放音乐.我启动 MPMoviePlayerController 的代码:

NSString* resourcePath = [[NSBundle mainBundle] resourcePath];resourcePath = [resourcePath stringByAppendingString:@"/music.m4a"];NSError* 错误;self.player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:resourcePath]];如果(错误){NSLog(@"错误: %@", err.localizedDescription);}AVAudioSession *session = [AVAudioSession sharedInstance];[会话 setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers 错误:nil];[会话 setActive:YES 错误:nil];[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];[self.player setShouldAutoplay:NO];[self.player setControlStyle: MPMovieControlStyleEmbedded];self.player.view.hidden = 是;[self.player prepareToPlay];

当我执行 [self.player play]; 音乐开始.但我也想在 LockScreen 和 ControlCenter 中显示歌曲名称、专辑名称和专辑插图.我正在使用以下代码:

Class PlayingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");如果(播放信息中心){NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage: [UIImage imageNamed:@"artwork.png"]];[songInfo setObject:@"SongName" forKey:MPMediaItemPropertyTitle];[songInfo setObject:@"ArtistName" forKey:MPMediaItemPropertyArtist];[songInfo setObject:@"AlbumTitle" forKey:MPMediaItemPropertyAlbumTitle];[songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork];[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];}

但锁屏中没有显示任何内容.它也不会显示在 ControlCenter 中.

我该如何解决我的问题?我在互联网上没有找到任何内容.

提前致谢,法比安.

解决方案

问题是你没有满足成为锁屏和控制中心的主人的要求,如

I'm developing a music application, which should play music in the background.

I use the MPMoviePlayerController to play the music. My code to initiate the MPMoviePlayerController:

NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
resourcePath = [resourcePath stringByAppendingString:@"/music.m4a"];
NSError* err;
self.player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:resourcePath]];
if (err) {
    NSLog(@"ERROR: %@", err.localizedDescription);
}
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
[session setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self.player setShouldAutoplay:NO];
[self.player setControlStyle: MPMovieControlStyleEmbedded];
self.player.view.hidden = YES;
[self.player prepareToPlay];

When I execute [self.player play]; the music starts. But I also want to display the name of the song, the name of the album and the album artwork in the LockScreen and the ControlCenter. I'm using the following code:

Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");
    if (playingInfoCenter) {
        NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];
        MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage: [UIImage imageNamed:@"artwork.png"]];
        [songInfo setObject:@"SongName" forKey:MPMediaItemPropertyTitle];
        [songInfo setObject:@"ArtistName" forKey:MPMediaItemPropertyArtist];
        [songInfo setObject:@"AlbumTitle" forKey:MPMediaItemPropertyAlbumTitle];
        [songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork];
        [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];
    }

But nothing gets displayed in the LockScreen. It doesn't get displayed in the ControlCenter either.

How can I solve my problem? I didn't find anything on the internet.

Thanks in advance, Fabian.

解决方案

The problem is that you are not satisfying the requirements to become master of the lock screen and control center, as I explain in my book. You should be seeing the modern (iOS 8) equivalent of this:

The fact that you are not seeing it suggests that you are omitting one or more of the requirements, which I list (quoting directly from my book here):

  • Your app must contain a UIResponder in its responder chain that returns YES from canBecomeFirstResponder, and that responder must actually be first responder.
  • Some UIResponder in the responder chain, at or above the first responder, must implement remoteControlReceivedWithEvent:.
  • Your app must call the UIApplication instance method beginReceivingRemoteControlEvents.
  • Your app’s audio session’s policy must be Playback.
  • Your app must be emitting some sound.

I don't know which of those you are omitting; it could be more than one. You might like to compare your code with a working example, here:

https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/iOS7bookExamples/bk2ch14p653backgroundPlayerAndInterrupter/backgroundPlayer/backgroundPlayer/ViewController.m

这篇关于xcode - MPNowPlayingInfoCenter 信息不显示在 iOS 8 上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆