9

Как передать информацию о песне, такую ​​как название песни и продолжительность трека, в центр управления. Плеер играет музыку отлично, а управление воспроизведением и паузой работает нормально.Как показать продолжительность трека поиска в центре управления

Игра с музыкальным приложением яблока

enter image description here enter image description here

Играя с моим приложением следующим кодом, как передать информацию о песне, чтобы отобразить его?

enter image description here enter image description here

//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]; 
} 
+0

редактировать скриншоты – Desmond

+0

Установите этот флажок удивительный ответ: http://stackoverflow.com/questions/18800889/how-to-set-current-playback-duration-and -elapsed-time-on-ios-7-lockscreen – Mariam

ответ

0

Не уверен, но может быть этот код поможет вам немного ..

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

Hi @iMove, спасибо за ответ, но это не то, что я ищу. Обновил мой вопрос со скриншотами – Desmond

1

я случайно работать на одном и том же сегодня, и не знаю, ответ, но в моем приложении Центр управления показывает имя приложения. Я хочу показать название того, что я играю. У меня даже есть фотография, которую я хотел бы показать, как обложка альбома. Я не думаю, что я делаю что-то другое, чем вы, я не кодировал ничего, чтобы отправить его имя приложения, например.

Секундочку ... Я вижу, что есть нечто, называемое MPNowPlayingInfoCenter, что мы должны смотреть в ..

+0

Hi lepton, Я обновил свой вопрос тем, что хочу, и обнаружил, что я не могу найти дорожку ..... – Desmond

5

Вы играете песни из музыкальной библиотеки плеер? Если да, то вы должны MPMusicPlayerViewController, он предоставляет встроенные функции для свойств строки поиска, а также Инфоцентра.

Я могу видеть здесь, в вашем коде, который вы использовали 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] 

Здесь нам нужно учитывать альбом.playrDur и album.elapsedTime в соответствии с требуемым форматом.

+0

, когда я вызываю forwardToNextItem, тогда аудио деталь не отображается на экране блокировки. – ABJ

+0

@ABJ Не понял, что такое advanceToNextItem? Вы имеете в виду кнопку «>>» следующей песни? Если это так, то оттуда он вызовет метод делегата, вам снова потребуется обновить следующую информацию о песне, как указано выше. – Samir

2

Вы ищете это:

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


    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^