0

我正在使用Core Haptics播放自定义的“心跳”模式,同时使用 AVAudioPlayer 播放音乐。具体来说,我正在创建一个简单的CHHapticPattern,然后创建一个CHHapticEngine来播放该模式。

自定义触觉在运行 iOS 14 的 iPhone 上运行良好,但在 iOS 15.0+ 中完全停止工作。触觉引擎在 iOS 15 中不会抛出任何错误,它只是默默地失败。标准的触觉反馈,例如UIImpactFeedbackGenerator工作正常;这只是失败的自定义触觉。

经过大量调试并没有发现 Core Haptics 突然停止工作的明显原因,我最终发现罪魁祸首是我的AVAudioSession配置如下:

     // Setup AVAudioSession
        do {
            
            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.duckOthers]) // <-- This conflicts with Core Haptics on iOS 15, but not iOS 14
            try AVAudioSession.sharedInstance().setActive(true)
            
        } catch {
            print("Error activating AVAudioSession: \(error)")
        }

如果我删除该.duckOthers选项(例如,替换为.mixWithOthers),则自定义触觉模式会在 iOS 15(和 14)中成功播放。

虽然我可以接受 using.mixWithOthers而不是.duckOthers,但我看不出任何明显的理由为什么.duckOthers应该与 Core Haptics 冲突,并且突然开始仅在 iOS 15.0+ 中与它发生冲突。任何想法为什么?否则,我将向 Apple 提交错误报告。

这是一个演示该问题的精简演示项目的链接。如果您在支持触觉的 iPhone(iPhone 8 或更高版本)上的 iOS 15 上运行它,自定义触觉模式不会播放,但它在 iOS 14 上可以正常播放: link to project

4

0 回答 0