1

J'ai une application d'entraînement watchOS3 qui utilise notifications haptiques. Il est configuré correctement pour exécuter une session d'entraînement et les haptiques fonctionnent lors de l'exécution en arrière-plan. Cependant, si les écouteurs bluetooth sont connectés à la montre Apple, alors vous obtenez uniquement la vibration haptique OU le carillon audio pour l'haptique, selon que l'application est actuellement affichée sur le cadran ou en arrière-plan.L'haptique ne fonctionne pas en arrière-plan lorsque les écouteurs Bluetooth sont connectés à Apple Watch

Voilà comment je joue l'haptique:

WKInterfaceDevice.current().play(.notification) 

Voici les détails:

  • d'Apple montre Nike + apparié pour casque: son haptique et carillon activent indépendamment du fait que la le cadran de la montre est activé ou désactivé. Le son du carillon est fort et clair.

  • d'Apple montre Nike + Couplé à un casque Bluetooth: haptique actif uniquement si le visage de montre est, carillon audio est éteint. Le carillon audio est activé lorsque le cadran de la montre est éteint, haptique désactivé. Le son du carillon est fort et clair.

J'ai testé l'application jumelant la montre d'Apple séparément avec le Platronic Backbeat Go 2 (publié 7/2013) et le Bose QuietControl 30 (publié 10/2016). Les résultats étaient les mêmes. Quelqu'un sait-il s'il s'agit d'une limitation de watchOS 3, un bug ou est-ce qu'il y a autre chose que je dois faire?

Merci, Jeff

+0

Voici comment je joue haptique en arrière-plan http://stackoverflow.com/a/43489557/5946768 – Mrsantateam

Répondre

0

Il y a un autre facteur à considérer, ce qui est de savoir si l'interrupteur principal mute Watch est activé ou désactivé.

J'ai trouvé ce qui suit comme solution de contournement appropriée.

Lorsque vous voulez que votre audio/haptique à noter alors que la musique joue sur Bluetooth casque, cette catégorie AVAudioSession ensemble:

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

Ensuite, lorsque vous avez terminé votre audio/haptique, réinitialiser le AVAudioSession retour à:

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

J'ai cette classe d'aide pour aider à gérer les états:

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 {} 
    } 
} 

Ensuite, je peux passer rapidement par: AVAudio.setAudioState(.playbackDuckOthers)

0

Le comportement documenté dans la question est la la façon dont son supposé être, selon Apple. La raison donnée est en raison du délai entre le robinet haptique et l'audio haptique lors de l'utilisation des écouteurs bluetooth. J'espère que ce comportement change à l'avenir ...