MPMusicPlayerController не запускается (на переднем плане), когда на устройстве используется приложение подкаста - PullRequest
0 голосов
/ 19 апреля 2020

Я работаю над приложением IOS, которое после некоторых взаимодействий с пользователем и запуска таймера запускает воспроизведение музыки c из библиотеки musi c. Он работал нормально с локальными musi c и аудиокнигами (приложение для книг) и сторонними проигрывателями musi c. Я проверяю это, играя некоторые музыкальные файлы c из другого приложения (Musi c, Books, et c ...) и проверяю, заменит ли мое приложение то, что воспроизводится при запуске, или нет, а также воспроизводит музыку * 1040. * из моего приложения, это так.

Странно, но сегодня я начал тестирование с приложением подкаста, и оно не работает согласованно, иногда останавливает воспроизведение подкаста, а иногда нет, устройство просто игнорирует musicPlayer.play () и поддерживает подкаст в работе.

Я попробовал три варианта медиаплееров

let applicationMusicPlayer = MPMusicPlayerController.applicationMusicPlayer
let systemMusicPlayer = MPMusicPlayerController.systemMusicPlayer
let applicationQueuePlayer = MPMusicPlayerController.applicationQueuePlayer
let mediaItems = MPMediaQuery.songs().items
if mediaItems != nil {
  let mediaCollection = MPMediaItemCollection(items: mediaItems!)
  applicationMusicPlayer.setQueue(with: mediaCollection)
  systemMusicPlayer.setQueue(with: mediaCollection)
  applicationQueuePlayer.setQueue(with: mediaCollection)
  applicationMusicPlayer.prepareToPlay()
  systemMusicPlayer.prepareToPlay()
  applicationQueuePlayer.prepareToPlay()
  applicationMusicPlayer.play()
  systemMusicPlayer.play()
  applicationQueuePlayer.play()
}

Я попробовал каждый по отдельности, я попробовал их даже вместе: D и все же это не надежно, иногда это работает, иногда это не так. Я держу свое приложение открытым на переднем плане и предотвращаю блокировку экрана с помощью UIApplication.shared.isIdleTimerDisabled = true и освобождаю его на более позднем этапе

есть «очень уродливый» взлом, который мне удалось сделать, который работает надежно

 var x = 50

 while x > 1 {
   applicationQueuePlayer.play()
   x -= 1
 }

Посоветуйте, пожалуйста, есть ли способ расставить приоритеты на воспроизводимом сейчас элементе устройства? например, дать моему приложению более высокий приоритет или что-то в этом роде, чтобы оно могло заставить телефон перестать играть во что-то еще и воспроизводить музыку c через мое приложение

Еще одно замечание: иногда я получаю эту ошибку сразу после инициализации медиаплеер

[SDKPlayback] applicationQueuePlayer _establishConnectionIfNeeded timeout [ping did not pong]
[core] Error returned from daemon: Error Domain=com.apple.accounts Code=9 "(null)
[iTunesCloud] [ICUserIdentityStore] Failed to fetch local store account with error: Error Domain=com.apple.accounts Code=9

Я посмотрел в Интернете и, кажется, ошибка с IOS 13, но не уверен, связано ли это или нет (иногда я получаю его, когда он работает или когда он не работает)

информация:

  • Xcode: версия 11.4.1 (11E503a)
  • Устройство: iPhone8,4 (iPhone SE)
  • Устройство IOS: 13.4.1 сборка 17E262
  • Развертывание IOS: 13.3
...