Automatically handle Audio interruptions (#113)

* Remove audio device when interruption begins

* Remove ReactLogger:alsoLogToJS

* Fix ReactLogger.logJS calls

* Fix `AVCaptureSessionInterruptionReasonKey` cast
This commit is contained in:
Marc Rousavy
2021-03-29 14:12:04 +02:00
committed by GitHub
parent cd180dc73b
commit 4ea636e0d0
4 changed files with 62 additions and 22 deletions

View File

@@ -46,6 +46,14 @@ final class CameraView: UIView {
selector: #selector(sessionRuntimeError),
name: .AVCaptureSessionRuntimeError,
object: captureSession)
NotificationCenter.default.addObserver(self,
selector: #selector(sessionInterruptionBegin),
name: .AVCaptureSessionWasInterrupted,
object: captureSession)
NotificationCenter.default.addObserver(self,
selector: #selector(sessionInterruptionEnd),
name: .AVCaptureSessionInterruptionEnded,
object: captureSession)
NotificationCenter.default.addObserver(self,
selector: #selector(audioSessionInterrupted),
name: AVAudioSession.interruptionNotification,
@@ -56,6 +64,12 @@ final class CameraView: UIView {
NotificationCenter.default.removeObserver(self,
name: .AVCaptureSessionRuntimeError,
object: captureSession)
NotificationCenter.default.removeObserver(self,
name: .AVCaptureSessionWasInterrupted,
object: captureSession)
NotificationCenter.default.removeObserver(self,
name: .AVCaptureSessionInterruptionEnded,
object: captureSession)
NotificationCenter.default.removeObserver(self,
name: AVAudioSession.interruptionNotification,
object: AVAudioSession.sharedInstance)
@@ -234,7 +248,7 @@ final class CameraView: UIView {
// pragma MARK: Event Invokers
internal final func invokeOnError(_ error: CameraError, cause: NSError? = nil) {
ReactLogger.log(level: .error, message: "Invoking onError(): \(error.message)", alsoLogToJS: true)
ReactLogger.log(level: .error, message: "Invoking onError(): \(error.message)")
guard let onError = self.onError else { return }
var causeDictionary: [String: Any]?
@@ -254,7 +268,7 @@ final class CameraView: UIView {
}
internal final func invokeOnInitialized() {
ReactLogger.log(level: .info, message: "Camera initialized!", alsoLogToJS: true)
ReactLogger.log(level: .info, message: "Camera initialized!")
guard let onInitialized = self.onInitialized else { return }
onInitialized([String: Any]())
}