Как сказать MPNowPlayingInfoCenter, или нет, музыка играет или приостанавливается?
Я не могу заставить iOS показывать правильную кнопку воспроизведения/паузы в дистанционном управлении аудио. Я получаю события дистанционного управления и устанавливаю все значения словаря nowPlayingInfo
.
Все работает отлично, и я даже вижу обложку на экране блокировки. За исключением кнопки паузы/воспроизведения. Он всегда выглядит как пауза, даже если мой AVAudioPlayer
играет. Он отправляет событие паузы независимо от состояния воспроизведения.
Как я могу уведомить iOS о том, что AVAudioPlayer приостановлен и что теперь он должен показывать кнопку воспроизведения на панели кнопок пульта ДУ?
Ответы
Ответ 1
Убедитесь, что вы устанавливаете свойство MPNowPlayingInfoPropertyPlaybackRate. 0.0f для указания паузы, 1.0f для указания воспроизведения. При изменении этих значений вам также необходимо установить значение MPNowPlayingInfoPropertyElapsedPlaybackTime.
Вот пример кода, где updateMetadata
- это функция, которая применяет эти изменения к словарю MPNowPlayingInfoCenter.nowPlayingInfo
. Это указывает на то, что игрок остановлен.
[self updateMetadata:[NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithDouble:audioFile.player.currentTime],
MPNowPlayingInfoPropertyElapsedPlaybackTime,
[NSNumber numberWithFloat:0.0f],
MPNowPlayingInfoPropertyPlaybackRate,
nil]];
Ответ 2
У меня была эта проблема сегодня: я обнаружил, что тот факт, что я записывал звук, а также воспроизводил его, заставил кнопку отображать символ паузы.
Когда я остановил AVAudioRecorder
от записи, кнопка паузы стала кнопкой воспроизведения.
Ответ 3
Довольно часто проблема заключается в просто симуляторе iPhone. Как только вы используете функцию play()
вашего экземпляра AVAudioPlayer
, пульт дистанционного управления должен автоматически переключать паузу/воспроизведение. Если у вас возникают проблемы, когда этого не происходит, попробуйте запустить программу на устройстве.
Чтобы переключить кнопку, вам не нужно, чтобы установить любой playingInfo
из MPNowPlayingInfoCenter
, и вам не нужно удерживать активный AVAudioSession
.
Ответ 4
Вот пример кода, где updateMetadata - это функция, которая применяет эти изменения в словаре MPNowPlayingInfoCenter.nowPlayingInfo. Это указывает на то, что игрок остановлен. В быстрых
self.updateMetadata(NSDictionary.dictionaryWithValuesForKeys(NSNumber(Double(audioFile.player.currentTime))),MPNowPlayingInfoPropertyElapsedPlaybackTime,NSNumber(numberWithFloat:0.0f),MPNowPlayingInfoPropertyPlaybackRate,nil)