2013-09-14 1 views
7

я начинаю -Play с AVAudioPlayer, а затем установить словарь nowPlaying так:Совместим MPNowPlayingInfoCenter с AVAudioPlayer?

NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init]; 
         
MPMediaItemArtwork *albumArt = [[MPMediaItemArtwork alloc] initWithImage: [UIImage imagedNamed:@"AlbumArt"]]; 
[songInfo setObject:@"Audio Title" forKey:MPMediaItemPropertyTitle]; 
[songInfo setObject:@"Audio Author" forKey:MPMediaItemPropertyArtist]; 
[songInfo setObject:@"Audio Album" forKey:MPMediaItemPropertyAlbumTitle]; 
[songInfo setObject:albumArt forKey:MPMediaItemPropertyArtwork]; 
[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo]; 

Блокировка экрана всегда показывает кнопку паузы. Я правильно получаю события дистанционного управления, и я могу переключать воспроизведение/паузу через события дистанционного управления, но экран блокировки продолжает показывать «паузу», даже когда он воспроизводится.

Теперь я видел эту работу с MPMoviePlayerController. Может ли кто-нибудь объяснить, как MPNowPlayingInfoCenter определяет, должна ли она показывать кнопку воспроизведения или паузы?

ответ

1

Вы установили правильный AVAudioSessionCategory на AudioSession? он должен быть AVAudioSessionCategoryPlayback Я считаю, что он работает.

0

В настоящий момент я не использую MPNowPlaying, но, видимо, мне нужно, чтобы получить информацию о звуке, отображаемую на экране блокировки.

Однако, в дополнение к тому, что @ user3061915 сказал, чтобы управлять кнопку play/pause, я использовал UIEventTypeRemoteControl и она работает идеально подходит для управления кнопки play/pause:

- (void)remoteControlReceivedWithEvent:(UIEvent *)event { 
    //if it is a remote control event handle it correctly 
    if (event.type == UIEventTypeRemoteControl) 
    { 
     if (event.subtype == UIEventSubtypeRemoteControlPlay) 
     { 
      [self playAudio]; 
     } 
     else if (event.subtype == UIEventSubtypeRemoteControlPause) 
     { 
      [self pauseAudio]; 
     } 
     else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) 
     { 
      [self togglePlayPause]; //This method will handle the toggling. 
     } 
    } 
0

Я просто пофиксить проблема вроде этого в моем собственном приложении. Первоначально я использовал [[AVAudioSession sharedInstance] setCategory: withOptions: error:] и предоставил AVAudioSessionCategoryOptionMixWith Other и AVAudioSessionCategoryOptionDuckOthers. Это оказалось моей проблемой. Если вы устанавливаете соединение с другими, вы не получаете никаких событий дистанционного управления. Они все еще идут на iPod-приложение. Если вы установили другие утки, вы получаете события дистанционного управления, но кажется, что это вызывает проблему, которую вы описываете: кнопка воспроизведения/паузы показывает неправильную вещь. Я не знаю, почему. У меня есть кнопка воспроизведения/паузы, чтобы вести себя, установив опции в 0 или фактически просто вызвав setCategory: error :.