Cómo mostrar la duración de la pista de búsqueda en el centro de control

¿Cómo paso la información de la canción, como el nombre de la canción y la duración de la pista al centro de control? El reproductor reproduce música bien y el control de reproducción y pausa funciona bien.

Jugando con la aplicación de música de Apple

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

¿Jugar con mi aplicación con el código a continuación, cómo pasar la información de la canción para mostrarla?

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

//AppDelegate -(void)setupAudio { // Set AVAudioSession NSError *sessionError = nil; [[AVAudioSession shanetworkingInstance] setDelegate:self]; [[AVAudioSession shanetworkingInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError]; // Change the default output audio route UInt32 doChangeDefaultRoute = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute); [[UIApplication shanetworkingApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; } //Make sure we can recieve remote control events - (BOOL)canBecomeFirstResponder { return YES; } - (void)remoteControlReceivedWithEvent:(UIEvent *)event { //if it is a remote control event handle it correctly if (event.type == UIEventTypeRemoteControl) { if (event.subtype == UIEventSubtypeRemoteControlPlay) { NSLog(@"UIEventSubtypeRemoteControlPlay"); [[AppMusicPlayer shanetworkingService]playAudio]; } else if (event.subtype == UIEventSubtypeRemoteControlPause) { NSLog(@"UIEventSubtypeRemoteControlPause"); [[AppMusicPlayer shanetworkingService]pauseAudio]; } else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) { NSLog(@"UIEventSubtypeRemoteControlTogglePlayPause"); } } } AppMusicPlayer.m + (id) shanetworkingService { static dispatch_once_t _singletonPnetworkingicate; static AppMusicPlayer *_shanetworkingObject = nil; dispatch_once(&_singletonPnetworkingicate, ^{ _shanetworkingObject = [[AppMusicPlayer alloc]init]; }); return _shanetworkingObject; } - (id)init { self = [super init]; if (self) { // Work your initialising here as you normally would } return self; } - (void)playAudio { [self.audioPlayer play]; } - (void)pauseAudio { NSLog(@"pause"); [self.audioPlayer pause]; } - (void)playAudioFromURL:(NSURL *)songURL { [self.audioPlayer stop]; //Declare the audio file location and settup the player NSError *error; self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:songURL error:&error]; [self.audioPlayer setNumberOfLoops:-1]; if (error) { NSLog(@"%@", [error localizedDescription]); } else { //Load the audio into memory [self.audioPlayer prepareToPlay]; [self.audioPlayer play]; } } -(void)setUpRemoteControl { NSDictionary *nowPlaying = @{MPMediaItemPropertyArtist: songItem.artistName, MPMediaItemPropertyAlbumTitle: songItem.albumTitle, MPMediaItemPropertyPlaybackDuration:songItem.playbackDuration, MPNowPlayingInfoPropertyPlaybackRate:@1.0f, MPMediaItemPropertyArtwork:[songMedia valueForProperty:MPMediaItemPropertyArtwork] }; [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nowPlaying]; } 

¿Estás reproduciendo canciones de la biblioteca de música de iPods? Si es así, usted debe MPMusicPlayerViewController, proporciona funcionalidad de compilation para las properties de la barra de búsqueda, así como el centro de información.

Puedo ver aquí en tu código que has usado AVAudioPlayer, podemos establecer solo los detalles a continuación utilizando la class AVAudioPlayer, pero no podemos acceder al evento de cambio de búsqueda en nuestra aplicación.

 NSMutableDictionary *albumInfo = [[NSMutableDictionary alloc] init]; UIImage *artWork = [UIImage imageNamed:album.imageUrl]; [albumInfo setObject:album.title forKey:MPMediaItemPropertyTitle]; [albumInfo setObject:album.auther forKey:MPMediaItemPropertyArtist]; [albumInfo setObject:album.title forKey:MPMediaItemPropertyAlbumTitle]; [albumInfo setObject:artworkP forKey:MPMediaItemPropertyArtwork]; [albumInfo setObject:album.playrDur forKey:MPMediaItemPropertyPlaybackDuration] [albumInfo setObject:album.elapsedTime forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime] [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:albumInfo] 

Aquí necesitamos contar album.playrDur y album.elapsedTime según el formatting requerido.

Usted está buscando esto:

 - (IBAction)playButtonTouched:(id)sender { Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter"); if (playingInfoCenter) { 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]; } } 

Hoy estoy trabajando en lo mismo y no sé la respuesta, pero en mi aplicación, el Centro de control muestra el nombre de la aplicación. Quiero poder mostrar el título de lo que estoy jugando. Incluso tengo una foto que me gustaría mostrar, como la portada de un álbum. No creo que esté haciendo nada diferente a ti, no codifiqué nada para enviarle el nombre de la aplicación, por ejemplo.

Espere un segundo … Veo que hay algo llamado MPNowPlayingInfoCenter que deberíamos analizar …

No estoy seguro, pero este código puede ayudarlo un poco …

  - (void) handle_NowPlayingItemChanged: (id) notification { MPMediaItem *currentItem = [musicPlayer nowPlayingItem]; NSString *titleString = [currentItem valueForProperty:MPMediaItemPropertyTitle]; if (titleString) { titleLabel.text = [NSString stringWithFormat:@"Title: %@",titleString]; } else { titleLabel.text = @"Title: Unknown title"; } }