MPNowPlayingInfoCenter est-il compatible avec AVAudioPlayer?

Je commence à jouer avec AVAudioPlayer , puis je définis le dictionary nowPlaying comme ceci:

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

L'écran de locking affiche toujours un button de pause. Je reçois les events de contrôle à distance correctement et je peux basculer entre lecture / pause à travers les events de contrôle à distance, mais l'écran de locking continue à afficher "pause" même quand il est en cours de lecture.

Maintenant, j'ai vu ce travail avec MPMoviePlayerController. Quelqu'un peut-il expliquer comment MPNowPlayingInfoCenter détermine s'il doit afficher un button de lecture ou de pause?

Avez-vous défini la bonne AVAudioSessionCategory sur l' AudioSession ? il doit être AVAudioSessionCategoryPlayback je crois pour le faire fonctionner.

Je n'utilise pas MPNowPlaying pour l'instant, mais apparemment je le dois, afin d'get les informations audio affichées sur l'écran de locking.

Cependant, en plus de ce que @ user3061915 a dit, pour gérer le button play / pause , j'ai utilisé UIEventTypeRemoteControl et cela fonctionne parfaitement pour contrôler le button 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. } } 

Je viens de corriger un problème comme celui-ci dans ma propre application. J'ai initialement utilisé [[AVAudioSession sharedInstance] setCategory: withOptions: error:] et fourni AVAudioSessionCategoryOptionMixWithOthers et AVAudioSessionCategoryOptionDuckOthers. Cela s'est avéré être mon problème. Si vous définissez le mélange avec d'autres, vous n'obtenez aucun événement de contrôle à distance. Ils vont toujours à l'application iPod. Si vous définissez Duck autres, vous obtenez des events de contrôle à distance, mais il semble que cela provoque le problème que vous décrivez: le button lecture / pause montre la mauvaise chose. Je ne suis pas sûr pourquoi. J'ai obtenu le comportement du button play / pause en réglant les options sur 0, ou en appelant simplement setCategory: error :.