我有一个使用触觉通知的watchOS3
锻炼应用。它正确设置为在后台运行时运行锻炼会话和触觉工作。但是,如果蓝牙耳机连接到苹果手表,那么您只能获得触觉振动或触觉的音频铃声,具体取决于应用程序当前是在表盘上显示还是在后台运行。
以下是我如何玩触觉:
WKInterfaceDevice.current().play(.notification)
以下是详细信息:
Apple Watch Nike + Unpaired to Headphones:无论表盘是打开还是关闭,触觉和响铃声都会激活。铃声响亮而清晰。
Apple Watch Nike +配对蓝牙耳机: 仅当表盘打开时,触觉才有效,音频响铃关闭。当表盘关闭,触觉关闭时,音频响铃开启。铃声响亮而清晰。
我测试了将Apple Watch与Platronic Backbeat Go 2(2013年7月发布)和Bose QuietControl 30(2016年10月发布)分开配对的应用程序。结果是一样的。
任何人都知道这是watchOS 3
的限制,一个错误,还是我需要做的其他事情?
谢谢, 杰夫
答案 0 :(得分:0)
还有另一个要考虑的因素,即主要的静音开关是打开还是关闭。
我发现以下内容是合适的解决方法。
如果您希望在蓝牙耳机上播放音乐时注意到音频/触觉,请设置此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)
答案 1 :(得分:0)