Как установить текущую продолжительность воспроизведения и прошедшее время на заблокированном экране iOS 7?

Начиная с iOS 5, каждый музыкальный плеер может установить текущую музыку, такую ​​как название, исполнитель, название альбома и обложки в [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo, чтобы отображать на экране блокировки.

В iOS 7 информация о ползунке, продолжительности и истекшем времени воспроизведения добавляется как к экрану блокировки, так и к центру управления. Однако я не могу найти какие-либо документы для установки этих видов информации и разрешить слайдеру изменять позицию воспроизведения.

Есть ли способ решить эту проблему?

Ответ 1

Вам нужно настроить скорость воспроизведения до 1.0f, даже если документация говорит об этом 1.0 по умолчанию.

NSDictionary *mediaInfo = @{
    MPMediaItemPropertyTitle: audio.title,
    MPMediaItemPropertyArtist: audio.artist,
    MPMediaItemPropertyPlaybackDuration: audio.duration,
    MPNowPlayingInfoPropertyPlaybackRate: @(1.0)
};

[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:mediaInfo];

Ответ 2

Все они описаны в ссылке MPNowPlayingInfoCenter. В настоящее время воспроизводящиеся свойства являются необязательными значениями, которые могут быть установлены или не установлены. Ссылка на это в предложении в конце списка нормальных свойств игры:

Дополнительные свойства, которые вы можете, описаны в этом документе в Дополнительные свойства метаданных... (акцент мой)

Свойства, которые вас интересуют: MPNowPlayingInfoPropertyElapsedPlaybackTime и MPMediaItemPropertyPlaybackDuration.

Эта информация является общедоступной, и поскольку SDK iOS 7 пока не опубликован (начиная с 2013-09-14), я предполагаю, что он был доступен до этой версии iOS.

Ответ 3

Просто будьте осторожны: документ Apple никогда не делал этого ясно - если вы используете MPMusicPlayerController, ваша музыка воспроизводится под капотом с помощью приложения "music", и у вас нет никакого контроля над nowPlayingInfoCenter. И вы НЕ будете получать события дистанционного управления, генерируемые пользовательскими действиями (например, воспроизведение/пауза), применяемые к экрану блокировки, поскольку эти события распространяются через nowPlayingInfoCenter в "музыкальное" приложение, а не на ваше. При использовании других медиаплееров, таких как AV или AvAudio, вы можете управлять nowPlayingInfoCenter и получать события дистанционного управления. Но если вы используете AVAudioSessionCategoryOptions.MixWithOthers для настройки AV-плеера, вы также не можете управлять nowPlayingInfoCenter. Я хочу, чтобы Apple задокументировала эти детали лучше.