Zajmuję się tworzeniem aplikacji muzycznej, która powinna odtwarzać muzykę w tle.xcode - Informacje MPNowPlayingInfoCenter nie są wyświetlane na iOS 8
Używam MPMoviePlayerController
do odtwarzania muzyki. Mój kod o wszczęciu 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];
Kiedy wykonać [self.player play];
zaczyna się muzyka. Ale chcę również wyświetlić nazwę piosenki, nazwę albumu i okładkę albumu na LockScreen i ControlCenter. Używam następującego kodu:
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];
}
Ale nic nie wyświetla się na ekranie blokady. Nie wyświetla się również na ControlCenter.
Jak mogę rozwiązać mój problem? Nic nie znalazłem w Internecie.
Z góry dzięki, Fabian.
Czy twój kod rzeczywiście jest wykonywany? – matt
Tak, [[MPNowPlayingInfoCenter defaultCenter] .nowPlayingInfo objectForKey: MPMediaItemPropertyTitle] zwraca prawą nazwę utworu. – FTFT1234
Aha! To naprawdę świetna wiadomość. Nie tylko twój kod działa, ale tak naprawdę ustawia "nowPlayingInfo". Więc pozwól, że cię o to zapytam - czy jesteś pierwszą osobą reagującą, aby pomyślnie odebrać zdalne sterowanie z ekranu blokady i centrum sterowania? – matt