MPNowPlayingInfoCenter defaultCenter не будет обновлять или получать информацию - PullRequest
28 голосов
/ 01 марта 2012

Я работаю над обновлением MPNowPlayingInfoCenter и у меня возникли некоторые проблемы. Я немного постарался до такой степени, что я в растерянности. Вот мой код:

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


    }

Это не работает, я тоже пробовал:

   [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nil];

В попытке получить его, чтобы удалить существующую информацию из приложения iPod (или любую другую информацию, которая может быть там). Кроме того, чтобы посмотреть, смогу ли я выяснить проблему, я попытался получить текущую информацию о запуске приложения:

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

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

и я получаю Currently playing: (null) // (null)

Я исследовал это довольно немного, и следующие статьи объясняют это довольно подробно, однако я все еще не могу заставить это работать должным образом. Я что-то пропустил? Будет ли что-нибудь мешающее этому? Является ли этот сервис моим приложением, которое необходимо зарегистрировать для доступа (такого не было ни в одной документации)?

Документы Apple

Изменение фонового управления звуком экрана блокировки

Теперь проигрываемая информация игнорируется

Ответы [ 2 ]

55 голосов
/ 02 марта 2012

Я наконец-то понял проблему, я не предлагал приложению получать события удаленного управления, просто добавление этой строки устранило проблему:

 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
2 голосов
/ 01 марта 2012

Я использую код ниже, и он всегда работает.Я также использую MPMoviePlayer, как вы.Вы проверяли, действительно ли NSClassFromString(@"MPNowPlayingInfoCenter") когда-либо возвращает YES?Вы установили приложение для воспроизведения звука в фоновом режиме в списке?

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

}
...