MPMusicPlayerController сообщает о состоянии воспроизведения как приостановленном, когда песня достигает конца, а также сообщает о состоянии воспроизведения как приостановленном после постановки в очередь песни, даже после явного вызова .Stop()
.
Это поведение не существовало ранее, и теперь вызывает проблемы для моего кода очередей, который использует проверку для playbackState == .stopped
.
Я установил обработчик центра уведомлений для MPMusicPlayerControllerPlaybackStateDidChange
, который вызывает функцию, которая проверяет, является ли состояние воспроизведения .stopped
, которая, в свою очередь, вызывает функцию делегата для оповещения о других аспектах моего приложения (состояние транспорта, удаление песни из очередь приложения, очередь на следующую дорожку и т. д.), которую песня завершила.
Это поведение было хорошо до этого обновления.
Может кто-нибудь рассказать мне о выпуске, объясняющем изменение, или дать руководство о том, как правильно определить конец песни?
Я попытался сравнить текущую позицию воспроизведения с продолжительностью песни, но они никогда не совпадают. Текущая позиция воспроизведения всегда на пару секунд короче продолжительности. Я попытался сравнить TimeIntervals (слишком высокое разрешение), а также использовать средство форматирования для преобразования их в строку и сравнить его (учитывая, что время правильно отображается в пользовательском интерфейсе).
Я должен также упомянуть, что я пытался проверить, что nowPlayingItem
равен нулю, но текущий трек не удален (также часть проблемы, но я рассматриваю их как связанные в данный момент).