Я не могу найти способ добавить функциональность перетаскивания програ ss bar, чтобы скрасить текущую воспроизводимую песню, однако, чтобы показать индикатор выполнения, частично покрывается Крисом выше, но вы должны передать продолжительность песни и другую информацию, чтобы отобразить индикатор выполнения. Таким образом, в дополнение к тому, что Крис отметил, что вам нужно добавить следующее в NSMutableDictionary:
[nowPlayingInfo setObject:[track valueForProperty: MPMediaItemPropertyPlaybackDuration]
forKey:MPMediaItemPropertyPlaybackDuration];
Кроме того, вы можете обрабатывать длительное нажатие кнопок вперед и назад и прокручивать музыку. В:
- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent
вы можете посмотреть на эти подтипы событий:
if (receivedEvent.subtype == UIEventSubtypeRemoteControlBeginSeekingBackward){};
if (receivedEvent.subtype == UIEventSubtypeRemoteControlBeginSeekingForward){};
if (receivedEvent.subtype == UIEventSubtypeRemoteControlEndSeekingBackward){};
if (receivedEvent.subtype == UIEventSubtypeRemoteControlEndSeekingForward){};
BeginSeekingForward и BeginSeekingBackward вызваны длительными нажатиями кнопок вперед и назад, соответственно, и, конечно, EndSeekingForward и EndSeekingBackward события Подтипы - это когда палец снят с кнопки.
Когда вы получите эти подтипы событий, принять новый NSDictionary к
[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo
со всей информацией, которая уже была в нем (в противном случае свойства, которые не проходят будут удалены) плюс новый MPNowPlayingInfoPropertyElapsedPlaybackTime
и MPNowPlayingInfoPropertyPlaybackRate
. Для скорости вы определяете, как быстро вы хотите прокручивать аудио. 1 - нормальная скорость, отрицательные значения - в обратном направлении, так что -2 - 2x нормальная скорость в обратном направлении. Вам необходимо будет установить скорость воспроизведения MPNowPlayingInfoCenter
так же, как скорость воспроизведения AVPlayer
, или они не будут выстраиваться в линию. Вот почему вы хотите также пройти в текущее время. Вы можете получить это с:
[player currentTime]
так, чтобы установить текущее время и скорость:
[nowPlayingInfo setObject:[player currentTime]
forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];
[nowPlayingInfo setObject:[[NSNumber alloc] initWithFloat:10]
forKey:MPNowPlayingInfoPropertyPlaybackRate];
и установить скорость игрока с:
[player setRate:10]
Это должно выстраиваться как игрок и индикатор выполнения, прокручивая с 10-кратной скоростью прокрутки вперед.Таким образом, вы сделаете это, когда получите подтип события BeginSeekingForward. Когда прокрутка заканчивается, установите скорость обратно в одну, но все же передавайте время и другую информацию в информационный центр. Для BeginSeekingBackward просто используйте отрицательное число для ставки.
Я знаю, что это старый пост, но не было хорошего решения, и я наткнулся на эту тему, ища, как получить информацию о музыке на экране блокировки. Я пытался реализовать эту функциональность на C# с Xamarin iOS и нашел хороший справочник и пример Objective-C с некоторыми из этих функций на http://www.sagorin.org/ios-playing-audio-in-background-audio/. Но у него не было функциональных возможностей прокрутки, и он не использовал информационный центр, он просто закрыл обработку паузы/воспроизведения с экрана блокировки. Я сделал пример приложения на C# с Xamarin, который демонстрирует предоставление информации в информационный центр и прокрутку с помощью кнопок «назад» и «вперед» с экранов блокировки и управления, которые вы можете получить здесь: https://github.com/jgold6/Xamarin-iOS-LockScreenAudio
Я надеюсь, что кто-то найдет это полезным.
Это потому что если вы U петь MediaPlayer, они используют AVPlayer. – daidai
'MPNowplayingInfo' может использоваться с любым игроком. Выполняем это с помощью 'AVPlayer'. – chris
Ой, я этого не осознавал - спасибо. – daidai