MPNowPlayingInfoCenter defaultCenter will not update or retrieve information

17,297

Solution 1

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];

Solution 2

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;

}
Share:
17,297
Jayson Lane
Author by

Jayson Lane

about me

Updated on June 21, 2022

Comments

  • Jayson Lane
    Jayson Lane about 2 years

    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