Я работаю над приложением 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