2013-10-25 6 views
6

При воспроизведении песни с помощью музыкального приложения ios 7 пользователь может использовать ползунок для изменения положения песни на экране блокировки/в центре управления. Slider активен:Как изменить положение трека на экране блокировки/центра управления?

enter image description here

Но при воспроизведении музыки в моем приложении пользователь не может это сделать. Slider не активен:

enter image description here

Как я могу включить эти функции в моем приложении?

+0

Как вы музицирование в вашем приложении? – WDUK

+0

@WDUK через MPMoviePlayerController –

+0

@NeimanAleksei, как вы показываете название песни и продолжительность песни? – Desmond

ответ

9

Вы можете изменить положение дорожки с помощью MPRemoteCommandCenter на прошивке 9.1 и выше.

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_0) { 
      MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter]; 
      [commandCenter.changePlaybackPositionCommand setEnabled:true]; 
      [commandCenter.changePlaybackPositionCommand addTarget:self action:@selector(changedThumbSliderOnLockScreen:)]; 
     } 

и метод

- (MPRemoteCommandHandlerStatus)changedThumbSliderOnLockScreen:(MPChangePlaybackPositionCommandEvent *)event 
{ 
    // change position 
    [self setCurrentPlaybackTime:event.positionTime]; 
    // update MPNowPlayingInfoPropertyElapsedPlaybackTime 
    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo]; 

    return MPRemoteCommandHandlerStatusSuccess; 
} 
3

Я искал то же самое, но я не думаю, что это возможно увидеть этот пост:

How to enable audio scrubber in iOS Lock Screen control panel?

также популярные приложения, такие как Spotify и Soundcloud не имеет этого реализовано.

Если вы ищете способ показать текущую музыку на экране блокировки, вам необходимо сделать следующее.

Во-первых, когда вы играете новое обновление дорожки по NowPlayingInfo:

NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init]; 

    [songInfo setObject:trackTitle forKey:MPMediaItemPropertyTitle]; 
    [songInfo setObject:artistName forKey:MPMediaItemPropertyArtist]; 
    [songInfo setObject:duration forKey:MPMediaItemPropertyPlaybackDuration]; 
    [songInfo setObject:releaseDate forKey:MPMediaItemPropertyReleaseDate]; 
    [songInfo setValue:playbackRate forKey:MPNowPlayingInfoPropertyPlaybackRate]; 
    [songInfo setObject:elapsedTime forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime]; 
    [songInfo setObject:albumArtImage forKey:MPMediaItemPropertyArtwork]; 
    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo]; 

Для обработки событий от Lockscreen, сначала нужно сказать свое приложение, чтобы начать получать события с пульта дистанционного управления. Я делаю это в didFinishLaunchingWithOptions применения моего AppDelegate используя следующий код

// Turn on remote control event delivery 
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

Далее вам нужно реализовать метод remoteControlReceivedWithEvent для обработки захваченных событий. В AppDelegate добавить следующий метод

- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent { 

if (receivedEvent.type == UIEventTypeRemoteControl) { 

    switch (receivedEvent.subtype) { 
     case UIEventSubtypeRemoteControlPause: 
      //pause code here 
      break; 

     case UIEventSubtypeRemoteControlPlay: 
      //play code here 
      break; 

     case UIEventSubtypeRemoteControlPreviousTrack: 
      // previous track code here 
      break; 

     case UIEventSubtypeRemoteControlNextTrack: 
      //next track code here 
      break; 

     default: 
      break; 
    } 
} 

}

Подробнее о MPNowPlayingInfoCenter из яблоневых документов ->https://developer.apple.com/library/ios/documentation/mediaplayer/reference/MPNowPlayingInfoCenter_Class

0

swift4 Вы можете изменить положение дорожки с помощью MPRemoteCommandCenter на прошивке 9.1 и выше.

let commandCenter = MPRemoteCommandCenter.shared() 
commandCenter.changePlaybackPositionCommand.isEnabled = true 
     commandCenter.changePlaybackPositionCommand.addTarget(self, action:#selector(changePlaybackPositionCommand(_:))) 

и метод

@objc func changePlaybackPositionCommand(_ event:MPChangePlaybackPositionCommandEvent) -> MPRemoteCommandHandlerStatus{ 
let time = event.positionTime 
     //use time to update your track time 
     return MPRemoteCommandHandlerStatus.success; 
    } 

обратите внимание, что вы должны сделать это для каждой команды в commandCenter, если вы хотите, чтобы включить

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