当蓝牙耳机连接到 Apple Watch 时,触觉不会在后台播放

Posted

技术标签:

【中文标题】当蓝牙耳机连接到 Apple Watch 时,触觉不会在后台播放【英文标题】:Haptics don't play in background when bluetooth headphones are connected to Apple Watch 【发布时间】:2016-11-04 13:34:24 【问题描述】:

我有一个watchOS3 锻炼应用程序,它使用触觉通知。它正确设置为运行锻炼会话,并且在后台运行时触觉工作。但是,如果蓝牙耳机连接到 Apple Watch,那么您只能获得触觉振动或触觉的音频提示,具体取决于应用当前是显示在表盘上还是在后台运行。

我是这样玩触觉的:

WKInterfaceDevice.current().play(.notification)

以下是详细信息:

Apple Watch Nike+ 未与耳机配对:无论表盘是打开还是关闭,触觉和提示音都会激活。钟声响亮而清晰。

Apple Watch Nike+ 与蓝牙耳机配对: 触觉仅在表盘打开且音频铃声关闭时才会激活。当表盘关闭时,音频提示音打开,触觉关闭。钟声响亮而清晰。

我分别测试了 Apple Watch 与 Platronic Backbeat Go 2(2013 年 7 月发布)和 Bose QuietControl 30(2016 年 10 月发布)配对的应用。结果是一样的。

有人知道这是watchOS 3 的限制、错误还是我需要做的其他事情?

谢谢, 杰夫

【问题讨论】:

这是我在后台播放触觉的方式***.com/a/43489557/5946768 【参考方案1】:

还有一个需要考虑的因素,即手表静音主开关是打开还是关闭。

我发现以下是一个合适的解决方法。

如果您希望在蓝牙耳机上播放音乐时注意到您的音频/触觉,请设置此 AVAudiosession 类别:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)

然后,当您完成音频/触觉后,将 AVAudioSession 重置为:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)

我有这个帮助类来帮助管理状态:

import AVFoundation

enum AudioPlaybackState 
    case playback
    case playbackDuckOthers


class AVAudio 
    private init()    // strictly a helper class

    static func setAudioState(_ state: AudioPlaybackState) 
        DispatchQueue.main.async 
            do 
                deactivateAudioSession()
                switch state 
                case .playback:
                    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)
                case .playbackDuckOthers:
                    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
                
                activateAudioSession()
             catch 
        
    

    static func deactivateAudioSession() 
        activateAudioSession(false)
    

    private static func activateAudioSession(_ value: Bool=true) 
        do 
            try AVAudioSession.sharedInstance().setActive(value)
         catch 
    

然后,我可以快速切换:AVAudio.setAudioState(.playbackDuckOthers)

【讨论】:

这在最新的 WatchOS 6 中仍然有效吗?当应用程序在后台运行并通过蓝牙耳机播放音乐时,我似乎无法触发任何触觉【参考方案2】:

根据 Apple 的说法,问题中记录的行为是其应有的方式。给定的原因是由于使用蓝牙耳机时触觉点击和触觉音频之间的延迟。我希望这种行为在未来有所改变......

【讨论】:

以上是关于当蓝牙耳机连接到 Apple Watch 时,触觉不会在后台播放的主要内容,如果未能解决你的问题,请参考以下文章

Apple Watch:Digital Crown 触觉反馈

Apple Watch的通信机制

Apple Watch Series 2 中的 CoreBluetooth

当尝试连接到蓝牙android时,应用程序崩溃

当涉及多种编码语言时,如何将我的应用程序连接到蓝牙?

系统声音服务连接到汽车的蓝牙时不会播放音频