Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MPNowPlayingInfoCenter defaultCenter will not update or retrieve information

I'm working to update the MPNowPlayingInfoCenter and having a bit of trouble. I've tried quite a bit to the point where I'm at a loss. The following is my code:

    self.audioPlayer.allowsAirPlay = NO;

    Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");

    if (playingInfoCenter) {

        NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];

        MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage:[UIImage imageNamed:@"series_placeholder"]];

        [songInfo setObject:thePodcast.title forKey:MPMediaItemPropertyTitle];
        [songInfo setObject:thePodcast.author forKey:MPMediaItemPropertyArtist];
        [songInfo setObject:@"NCC" forKey:MPMediaItemPropertyAlbumTitle];
        [songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork];

        [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];


    }

This isn't working, I've also tried:

   [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nil];

In an attempt to get it to remove the existing information from the iPod app (or whatever may have info there). In addition, just to see if I could find out the problem, I've tried retrieving the current information on app launch:

  NSDictionary *info = [[MPNowPlayingInfoCenter defaultCenter] nowPlayingInfo];
  NSString *title = [info valueForKey:MPMediaItemPropertyTitle];
  NSString *author = [info valueForKey:MPMediaItemPropertyArtist];

  NSLog(@"Currently playing: %@ // %@", title, author);

and I get Currently playing: (null) // (null)

I've researched this quite a bit and the following articles explain it pretty thoroughly, however, I am still unable to get this working properly. Am I missing something? Would there be anything interfering with this? Is this a service something my app needs to register to access (didn't see this in any docs)?

Apple's Docs

Change lock screen background audio controls

Now playing info ignored

like image 785
Jayson Lane Avatar asked Mar 01 '12 19:03

Jayson Lane


2 Answers

I finally figured out the problem, I was not prompting my app to receive remote control events, simply adding this line fixed the problem:

 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
like image 189
Jayson Lane Avatar answered Oct 20 '22 11:10

Jayson Lane


I use the code below and it always works. I'm also using MPMoviePlayer like you. Have you checked whether NSClassFromString(@"MPNowPlayingInfoCenter") ever actually returns YES? Have you set you app play audio in background key in your plist?

- (void) loadMPInformation
{
    NSDictionary *mpInfo;

    if([savedTrack.belongingAlbum.hasAlbumArt boolValue] == NO){
        mpInfo = [NSDictionary dictionaryWithObjectsAndKeys:savedTrack.belongingAlbum.album, MPMediaItemPropertyAlbumTitle, 
                  savedTrack.belongingArtist.artist, MPMediaItemPropertyArtist, savedTrack.name, MPMediaItemPropertyTitle, nil];   
    } else {
        UIImage *artImage = [UIImage imageWithData:savedTrack.belongingAlbum.art];
        MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc] initWithImage:artImage];
        mpInfo = [NSDictionary dictionaryWithObjectsAndKeys:savedTrack.belongingAlbum.album, MPMediaItemPropertyAlbumTitle, 
                  savedTrack.belongingArtist.artist, MPMediaItemPropertyArtist, savedTrack.name, MPMediaItemPropertyTitle, artwork, MPMediaItemPropertyArtwork, nil];
    }
    [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = mpInfo;

}
like image 2
deleterOfWorlds Avatar answered Oct 20 '22 10:10

deleterOfWorlds