>> ОБНОВЛЕНИЕ << </strong>
Помимо предоставления информации «Сейчас исполняется» с использованием объекта MPNowPlayingInfoCenter, кажется, что вам необходимо настроить удаленные обработчики событий (даже если они не используются) с использованием объекта MPRemoteCommandCenter.
Кроме того, информация о текущем воспроизведении не обновляется, пока приложение не воспроизведет звук.
Шаги:
1. Настройте обработчики событий пульта дистанционного управления.
В этом примере я только сконфигурировал pauseCommand, поскольку это было все, что было необходимо для работы информации Now Playing.
func setupRemoteTransportControls() {
// Get the shared MPRemoteCommandCenter
let commandCenter = MPRemoteCommandCenter.shared()
// Add handler for Pause Command
commandCenter.pauseCommand.addTarget{ event in
// Does nothing yet
return .success
}
}
2. Настройте информацию «Воспроизводится» с использованием объекта MPNowPlayingInfoCenter.
func setupNowPlayingInfo() {
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "My Song Title"
if let image = UIImage(named: "MyImage") {
nowPlayingInfo[MPMediaItemPropertyArtwork] =
MPMediaItemArtwork(boundsSize: image.size) { size in return image }
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}
3. Создайте элемент управления представлением Route Picker.
let routePickerView = AVRoutePickerView(frame: routView.bounds)
routePickerView.backgroundColor = UIColor.clear
routView.addSubview(routePickerView)
4. Воспроизведите аудио и просмотрите средство выбора маршрута.
Если вы просматриваете средство выбора маршрута перед воспроизведением звука приложения, старая информация о текущем воспроизведении останется.
Надеюсь, это работает сейчас!
СТАРЫЙ ОТВЕТ
Ваша реализация выглядит нормально. Единственным запросом будет boundSize. Это должен быть оригинальный размер художественного произведения.
Из руководства: «Обработчик запроса возвращает изображение в новом запрошенном размере. Запрашиваемый размер должен быть меньше, чем параметр boundsSize».
Кажется, что большинство реализаций просто возвращают оригинальный размер.
Возможно, проблема заключается в вашей реализации AVRoutePickerView.
Не могли бы вы попробовать поместить его в очередь отправки?
DispatchQueue.main.async {
let albumArt = MPMediaItemArtwork(boundsSize:CGSize(width: 50, height: 50))
{ sz in return UIImage(named: "MyImage")!}
MPNowPlayingInfoCenter.default().nowPlayingInfo =
[MPMediaItemPropertyTitle: "some title",
MPMediaItemPropertyArtist: "some artist",
MPMediaItemPropertyArtwork: albumArt]
}
В моем приложении для потокового аудио я предоставляю метаданные для отображения в Центре управления и на экране блокировки iOS, когда приложение находится в фоновом режиме.
Я использую MPVolumeView, который имеет кнопку для выбора маршрута вывода звука (автоматически обрабатывает создание экземпляров и отображение AVRoutePickerView).
Моя реализация выглядит следующим образом (согласно инструкции):
var nowPlayingInfo = [String : Any]()
nowPlayingInfo[MPMediaItemPropertyTitle] = "Song Title"
nowPlayingInfo[MPMediaItemPropertyArtist] = "Song Artist"
if let image = UIImage(named: "SongImage") {
nowPlayingInfo[MPMediaItemPropertyArtwork] = MPMediaItemArtwork(boundsSize: image.size) { size in return image }
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo