Звук приложения iOS watch не работает в фоновом режиме

#ios #swift #watchkit #apple-watch #watchapp

#iOS #swift #watchkit #apple-watch #watchapp

Вопрос:

введите описание изображения здесьЗдесь я прилагаю свой код и снимок экрана с разрешением, пожалуйста, сообщите, в чем здесь проблемы

я попробовал руководство Apple для разработчиков с этим URLhttps://developer.apple.com/documentation/watchkit/playing_background_audio

но все еще не работает.

 func play(url : URL) {
        if #available(watchOSApplicationExtension 5.0, *) {
            do {
                WKExtension.shared().isFrontmostTimeoutExtended = true
                try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category(rawValue: AVAudioSession.Category.playback.rawValue), mode: AVAudioSession.Mode.moviePlayback, options: AVAudioSession.CategoryOptions.duckOthers)
            } catch let error {
                print("** Unable to set up the audio session: (error.localizedDescription) **")
                // Handle the error here.
                return
            }

            do {
                self.player = try AVAudioPlayer(contentsOf: url)
//                player!.prepareToPlay()
                player?.delegate = self

            } catch let error {
                print("** Unable to set up the audio player:  (error.localizedDescription) **")
                // Handle the error here.
                return
            }


             print("nPlaying audio!")
                self.player?.play()

            // Activate and request the route.
            audioSession?.activate(options: []) { (success, error) in
                print("Success (success)")
                print("error (String(describing: error))")
                guard error == nil else {
                    print("** An error occurred: (error!.localizedDescription) **")
                    // Handle the error here.
                    return
                }

                // Play the audio file.
                if success {

                } else {
                    print("audio session activation failded")
                }
            }

        } else {
            print("alert")
        }
    }
  

Ответ №1:

Вам необходимо установить категорию перед активацией опции

Приведенный ниже список кодов показывает все шаги, необходимые для настройки сеанса, его активации и начала воспроизведения.

 // Set up the session.
let audioSession = AVAudioSession.sharedInstance()

do {
    try audioSession.setCategory(AVAudioSession.Category.playback,
                            mode: .default,
                            policy: .longForm,
                            options: [])
} catch let error {
    fatalError("*** Unable to set up the audio session: (error.localizedDescription) ***")
}

// Set up the player.
let player: AVAudioPlayer
do {
    player = try AVAudioPlayer(data: audioData)
} catch let error {
    print("*** Unable to set up the audio player: (error.localizedDescription) ***")
    // Handle the error here.
    return
}

// Activate and request the route.
audioSession.activate(options: []) { (success, error) in
    guard error == nil else {
        print("*** An error occurred: (error!.localizedDescription) ***")
        // Handle the error here.
        return
    }

    // Play the audio file.
    player.play()
}
  

Комментарии:

1. здесь я сделал то же самое с кодом, но не с gos с активацией и запросом маршрута. часть, которая всегда возвращает false