xcode - MPNowPlayingInfoCenter 信息不显示在 iOS 8 上 [英] xcode - MPNowPlayingInfoCenter info is not displayed on 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:
这篇关于xcode - MPNowPlayingInfoCenter 信息不显示在 iOS 8 上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!