1

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

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

WKInterfaceDevice.current().play(.notification) 

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

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

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

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

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

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

+0

Вот как я играю в тактику в фоновом режиме http://stackoverflow.com/a/43489557/5946768 – Mrsantateam

ответ

0

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

Я нашел следующее подходящее обходное решение.

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

0

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

Смежные вопросы