Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Haptic feedback not playing nice with AVFoundation? (UIImpactFeedbackGenerator, etc)

I'm trying to have a video/camera view in the background while I also allow for haptic feedback in my app for various actions, but it seems that AVFoundation is not playing nice with any of the calls I am making that involve the haptic calls:

if #available(iOS 10.0, *) {
    let generator = UIImpactFeedbackGenerator(style: .light)
    generator.prepare()
    generator.impactOccurred()
    
    // More:

    let feedbackGenerator  = UISelectionFeedbackGenerator()
    feedbackGenerator.selectionChanged()
}

Haptic feedback works great and as expected as long as the AVFoundation stuff is commented out. Any ideas?

Using:

captureSession = AVCaptureSession()

AND:

previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
like image 955
JasonAddFour Avatar asked May 27 '17 04:05

JasonAddFour


2 Answers

Since iOS 13, you can set setAllowHapticsAndSystemSoundsDuringRecording(_:) for AVAudioSession:

do {
    try AVAudioSession.sharedInstance().setAllowHapticsAndSystemSoundsDuringRecording(true)
} catch {
    print(error)
}

and then you can use:

let generator = UIImpactFeedbackGenerator(style: .light)
generator.prepare()
generator.impactOccurred()
like image 145
Vukašin Manojlović Avatar answered Oct 03 '22 07:10

Vukašin Manojlović


I assume that if you are using AVCaptureSession then you probably have code like this:

do {
    let audioDevice = AVCaptureDevice.default(for: .audio)
    let audioDeviceInput = try AVCaptureDeviceInput(device: audioDevice!)

    if captureSession.canAddInput(audioDeviceInput) {
        captureSession.addInput(audioDeviceInput)
    } else {
        print("Could not add audio device input to the session")
    }
} catch {
    print("Could not create audio device input: \(error)")
}

So audio input is not playing well with haptic engine. You have to remove audio input from capture session before you are playing haptic and then add it back.

like image 26
Max Sokolov Avatar answered Oct 03 '22 07:10

Max Sokolov