AVCaptureSession.InterruptionReason.videoDeviceNotAvailableInBackground

概要

AVCaptureSession でビデオセッションがバックグラウンド・フォアグラウンドに移行した場合の動作に関して。

Reference

AVCaptureSession.InterruptionReason.videoDeviceNotAvailableInBackground

  • iOS9.0以降
  • Mac Catalyst 13.0+
  • AVFoundation

宣言

case videoDeviceNotAvailableInBackground = 1

Discussion

バックグラウンドでのカメラの使用は禁止されています。バックグラウンドでカメラの実行を開始しようとすると、キャプチャセッションはこの中断理由でAVCaptureSessionWasInterruptedを送信します。stopRunning()メソッドを明示的に呼び出さない場合、startRunning()リクエストは保持され、アプリがフォアグラウンドに戻ると、AVCaptureSessionInterruptionEnded を受信してセッションの実行が開始されます。

解説

AVCaptureがバックグラウンド・バックグラウンドに移行しても、明示的にsession を stopRunning, startRunning を行う必要はなく、自動的に停止・再開される。フォアグランドに戻った時に、AVCaptureSessionInterruptionEnded が呼ばれるので、そこで必要な処理(Permission のチェックなど)を行えば良い。

実装例

    override func viewDidLoad() {
        NotificationCenter.default.addObserver(self, selector: #selector(avCaptureSessionInterruptionEnded), name: Notification.Name.AVCaptureSessionInterruptionEnded, object: nil)
    }

    // フォアグランドに戻って、session が自動的に再開された
    @objc func avCaptureSessionInterruptionEnded() {
        debugPrint("avCaptureSessionInterruptionEnded フォアグラウンドに戻ったので、session が自動的に再開された")
        doSomething()
    }

投稿者: admin

Free Software Engineer

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です