Как сказать 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)