首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蓝牙耳机与Apple Watch连接时,触觉不会在后台播放

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

Stack Overflow用户
提问于 2016-11-04 13:34:24
回答 2查看 632关注 0票数 2

我有一个watchOS3锻炼应用程序,它使用触觉通知。它正确地设置运行一个锻炼会话和触觉工作时,运行在后台。然而,如果蓝牙耳机连接到苹果手表,那么你只能得到触觉振动或触觉的音频铃声,这取决于应用程序是当前显示在手表上还是运行在后台。

下面是我演奏触觉的方法:

代码语言:javascript
复制
WKInterfaceDevice.current().play(.notification)

以下是详细信息:

  • Apple Watch Nike+与耳机不成对:无论手表是开着还是关着,、Haptic和铃声的声音都激活了。钟声响亮而清晰。
  • Apple Watch Nike+与蓝牙耳机配套: Haptic只有当手表面板打开、音频铃声关闭时才能活动。当手表关闭时,音频铃声打开,触觉关闭。钟声响亮而清晰。

我测试了与Apple配对的应用程序,分别与Platronic 2(发布于2013年7月)和Bose QuietControl 30 (发布于2016年10月)进行了对比。结果是一样的。

有人知道,如果这是watchOS 3的限制,还是一个bug,或者我还需要做什么呢?

谢谢,杰夫

EN

回答 2

Stack Overflow用户

发布于 2017-12-08 11:04:29

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

我发现以下几点是一个合适的解决办法。

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

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

然后,当您完成音频/触觉操作时,将AVAudioSession重新设置为:

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

我有这个帮助者类来帮助管理各州:

代码语言:javascript
复制
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)

票数 0
EN

Stack Overflow用户

发布于 2017-12-09 13:28:37

据苹果公司称,问题中所记录的行为就是它应该采取的方式。给出的原因是由于使用蓝牙耳机时触觉抽头和触觉音频之间的延迟。我希望这种行为在未来有所改变..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40424028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档