Как изменить метаданные для AVRoutePickerView? - PullRequest
0 голосов
/ 26 апреля 2018

enter image description here

Мое приложение воспроизводит звук, и я реализовал AVRoutePickerView, чтобы он мог передавать звук через AirPlay или Bluetooth.

После того, как я коснусь AVRoutePickerView, появится всплывающее изображение, которое, тем не менее, хорошо с неправильным изображением и заголовком.

Изображение и заголовок взяты из приложения Apple Music, в которое я играл раньше.

Как я могу изменить эти метаданные?

Я безуспешно пытался настроить MPNowPlayingInfoCenter.

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]

И вот как я сделал AVRoutePickerView.

import AVKit

let routePickerView = AVRoutePickerView.init(frame: myFrame)
routePickerView.backgroundColor = UIColor.clear
routePickerView.tintColor = UIColor(named: someColor)
routePickerView.activeTintColor = UIColor(named: someColor)
soundController.contentView.addSubview(routePickerView)

Мое приложение предназначено для iOS11 и тестирования на iPhone 6 и iPhone 7.

Пожалуйста, направь меня на правильный путь. Спасибо

1 Ответ

0 голосов
/ 03 мая 2018

>> ОБНОВЛЕНИЕ << </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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...