Тактильные ощущения не воспроизводятся в фоновом режиме, когда Bluetooth-наушники подключены к Apple Watch.

У меня есть приложение для тренировок watchOS3, в котором используются тактильные уведомления. Он правильно настроен для запуска сеанса тренировки, а тактильные ощущения работают при работе в фоновом режиме. Однако, если наушники Bluetooth подключены к Apple Watch, вы получаете только тактильную вибрацию ИЛИ звуковой сигнал для тактильного сигнала, в зависимости от того, отображается ли приложение в данный момент на циферблате или работает в фоновом режиме.

Вот как я играю тактильно:

WKInterfaceDevice.current().play(.notification)

Вот подробности:

  • Apple Watch Nike+, не сопряженные с наушниками: тактильный сигнал и звуковой сигнал активируются независимо от того, включен циферблат или нет. Звук звонка громкий и четкий.

  • Apple Watch Nike+ в паре с наушниками Bluetooth: Haptic активен, только если циферблат включен, звуковой сигнал отключен. Звуковой сигнал включен, когда циферблат выключен, тактильные ощущения отключены. Звук звонка громкий и четкий.

Я тестировал приложение, соединяя Apple Watch отдельно с Platronic Backbeat Go 2 (выпущено 7/2013) и Bose QuietControl 30 (выпущено 10/2016). Результаты были такими же.

Кто-нибудь знает, является ли это ограничением watchOS 3, ошибкой или есть что-то еще, что мне нужно сделать?

Спасибо, Джефф


person jeffbailey    schedule 04.11.2016    source источник
comment
Вот как я играю тактильно в фоновом режиме   -  person Mrsantateam    schedule 19.04.2017


Ответы (2)


Есть еще один фактор, который следует учитывать: включен или выключен основной переключатель отключения звука часов.

Я нашел следующее, чтобы быть подходящим обходным путем.

Если вы хотите, чтобы ваши аудио/тактильные сигналы были замечены во время воспроизведения музыки на наушниках Bluetooth, установите эту категорию 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)

person Hoon    schedule 08.12.2017
comment
Это все еще работает в последней версии WatchOS 6? Кажется, я не могу заставить какие-либо тактильные ощущения запускаться, когда приложение работает в фоновом режиме и воспроизводит музыку через наушники Bluetooth. - person bencallis; 11.06.2020

Поведение, задокументированное в вопросе, является таким, каким оно должно быть, по мнению Apple. Данная причина связана с задержкой между тактильным касанием и тактильным звуком при использовании наушников Bluetooth. Я надеюсь, что это поведение изменится в будущем...

person jeffbailey    schedule 09.12.2017