我的团队正在开发一套SDK,用于条形码扫描, 身份证扫描和OCR。我们使用设备的相机,具体来说是AVCaptureSession
,获取视频帧进行处理。
我们正在探索新的iOS 9多任务功能Slide Over和Split View。
Apple建议在以相机为中心的应用程序中选择退出这些功能,其中使用整个屏幕进行预览并快速捕捉瞬间是主要功能(参考)。这是他们在示例应用程序AVCam中使用的方法。
然而,我们的客户可能有不属于此类别的应用程序(例如移动银行应用程序),因此我们不能强制他们选择退出,而是需要处理SDK中的新功能。我们正在探索最佳方法来做到这一点,因为目前的文档并没有真正告诉我们该怎么做。
我们使用简单的相机示例应用程序来分析用例。该示例应用程序可在Github上获得,并且是基于iOS 9 Beta 5开发的。
从示例应用程序中,可以清楚地看到在使用Slide Over和Split View时发生了哪些系统事件。
- 当我们的应用程序为主要应用程序并使用Slide Over时,我们会收到
UIApplicationWillResignActiveNotification
和AVCaptureSessionDidStopRunningNotification
- 当使用Slide Over并且我们的应用程序为次要应用程序时,我们会在此之后立即收到UIApplicationWillEnterForegroundNotification
和AVCaptureSessionDidStopRunningNotification
- 当使用Split View时,在每个分隔符拖动时,我们的应用程序都会收到UIApplicationWillResignActiveNotification
。
- 但是,如果在Split View中启动相机,则会立即收到AVCaptureSessionDidStopRunningNotification
因此,经验证,当使用Slide Over或Split View时,AVCaptureSession
会立即停止。"What's confusing is that
UIImagePickerController
, which our sample app also supports, exhibits completely different behaviour.
UIImagePickerController
在应用程序进入Slide Over/ Split View时不会停止,而是完全正常地运行。用户可以在Split View中正常拍照。事实上,两个应用程序都可以同时使用UIImagePickerController
,并且处于活动状态的应用程序的UIImagePickerController
也是活动的。(您可以通过运行我们的示例应用程序和联系人应用程序 -> 新建联系人 -> 添加照片来尝试)"
考虑到这一切,我们的问题如下:
如果在使用“Slide Over”和“Split View”时立即暂停
AVCaptureSession
,是否有必要监视AVCaptureSessionDidStopRunningNotification
并向用户显示“摄像头已暂停”等消息,以便用户清楚地知道应用程序未执行扫描?为什么
UIImagePickerController
的行为与AVCaptureSession
不同?我们可以期待苹果公司在将来的测试版本中改变
AVCaptureSession
的行为以匹配UIImagePickerController
吗?