如何在控制中心显示寻道轨迹持续时间

如何将歌曲名称和曲目持续时间等歌曲信息传递给控制中心。 播放器播放音乐很好,播放和暂停控制工作正常。

玩苹果的音乐应用程序

在此处输入图像描述在此处输入图像描述

使用下面的代码玩我的应用程序,如何传递歌曲信息以显示它?

在此处输入图像描述在此处输入图像描述

//AppDelegate -(void)setupAudio { // Set AVAudioSession NSError *sessionError = nil; [[AVAudioSession sharedInstance] setDelegate:self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError]; // Change the default output audio route UInt32 doChangeDefaultRoute = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute); [[UIApplication sharedApplication] 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 sharedService]playAudio]; } else if (event.subtype == UIEventSubtypeRemoteControlPause) { NSLog(@"UIEventSubtypeRemoteControlPause"); [[AppMusicPlayer sharedService]pauseAudio]; } else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) { NSLog(@"UIEventSubtypeRemoteControlTogglePlayPause"); } } } AppMusicPlayer.m + (id) sharedService { static dispatch_once_t _singletonPredicate; static AppMusicPlayer *_sharedObject = nil; dispatch_once(&_singletonPredicate, ^{ _sharedObject = [[AppMusicPlayer alloc]init]; }); return _sharedObject; } - (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]; } 

你在播放iPod音乐库中的歌曲吗? 如果是,你应该使用MPMusicPlayerViewController,它为搜索栏属性和信息中心提供了内置function。

我可以在你的代码中看到你使用AVAudioPlayer,我们只能使用AVAudioPlayer类设置以下细节,但无法在我们的应用程序中访问搜索栏更改事件。

 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] 

在这里,我们需要根据所需的格式计算album.playrDur和album.elapsedTime。

你正在寻找这个:

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

我今天碰巧在做同样的事情并且不知道答案,但在我的应用程序中,控制中心确实显示了应用程序名称。 我希望能够展示我正在玩的东西的标题。 我甚至有一张我要展示的照片,就像一张专辑封面。 我认为我没有做任何与你不同的事情,例如,我没有编写任何代码来发送应用程序名称。

等一下……我看到有一种叫做MPNowPlayingInfoCenter的东西,我们应该研究一下……

不确定,但可能是这段代码帮助你一点点..

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