我有一个watchOS3锻炼应用程序,它使用触觉通知。它正确地设置运行一个锻炼会话和触觉工作时,运行在后台。然而,如果蓝牙耳机连接到苹果手表,那么你只能得到触觉振动或触觉的音频铃声,这取决于应用程序是当前显示在手表上还是运行在后台。
下面是我演奏触觉的方法:
WKInterfaceDevice.current().play(.notification)以下是详细信息:
我测试了与Apple配对的应用程序,分别与Platronic 2(发布于2013年7月)和Bose QuietControl 30 (发布于2016年10月)进行了对比。结果是一样的。
有人知道,如果这是watchOS 3的限制,还是一个bug,或者我还需要做什么呢?
谢谢,杰夫
发布于 2017-12-08 11:04:29
还有一个需要考虑的因素,那就是主手表静音开关是开还是关。
我发现以下几点是一个合适的解决办法。
当您希望在蓝牙耳机上播放音乐时注意到您的音频/触觉,请设置此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)
发布于 2017-12-09 13:28:37
据苹果公司称,问题中所记录的行为就是它应该采取的方式。给出的原因是由于使用蓝牙耳机时触觉抽头和触觉音频之间的延迟。我希望这种行为在未来有所改变..。
https://stackoverflow.com/questions/40424028
复制相似问题