我的团队正在开发一套 SDK条码扫描 https://github.com/pdf417/pdf417-ios, 身份证扫描 https://github.com/BlinkID/blinkid-ios and OCR https://github.com/BlinkOCR/blinkocr-ios。具体来说,我们使用设备的相机,AVCaptureSession
,以获得我们执行处理的视频帧。
我们正在探索新的 iOS 9 多任务处理功能“滑动”和“拆分视图”。
苹果建议针对以相机为中心的应用程序选择退出这些功能,其中使用整个屏幕进行预览和快速捕捉瞬间是主要功能(参考 https://developer.apple.com/library/prerelease/ios/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/index.html#//apple_ref/doc/uid/TP40015145-CH3-SW1)。这是他们的示例应用程序中使用的方法AVCam https://developer.apple.com/library/prerelease/ios/samplecode/AVCam/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010112.
但是,我们的客户可能拥有不属于此类别的应用程序(例如手机银行应用程序),因此我们不能强迫他们选择退出,相反,我们需要处理 SDK 中的新功能。我们正在探索实现这一目标的最佳方法,因为目前的文档并没有真正告诉我们该怎么做。
我们使用简单的相机示例应用程序来分析用例。示例应用程序可在Github https://github.com/cerovec/jccamera它是从 iOS 9 Beta 5 开始开发的。
从示例应用程序中,可以清楚地看到使用 Slide Over 和使用 Split View 时会发生哪些系统事件。
- 当我们的应用程序是主要的并且使用 Slide Over 时,我们得到
UIApplicationWillResignActiveNotification
and AVCaptureSessionDidStopRunningNotification
- 当使用 Slide Over 并且我们的应用程序是次要的时,我们得到
UIApplicationWillEnterForegroundNotification
and AVCaptureSessionDidStopRunningNotification
在那之后立即
- 当使用分割视图时,在每次拖动分隔线时,我们的应用程序都会得到
UIApplicationWillResignActiveNotification
.
- 但是,如果在分屏视图中启动相机,它会立即获取
AVCaptureSessionDidStopRunningNotification
所以,根据经验,看起来像AVCaptureSession
当使用 Slide Over 或 Split View 时,会立即停止。
令人困惑的是UIImagePickerController
,我们的示例应用程序也支持,表现出完全不同的行为。
UIImagePickerController
当应用程序进入幻灯片/拆分视图时,它不会停止,而是完全正常运行。通常可以在分屏视图中拍照。事实上,有两个应用程序,两者都存在UIImagePickerController
,可以并肩工作,与UIImagePickerController
活动应用程序处于活动状态。 (您可以通过运行我们的示例应用程序和联系人应用程序 -> 新联系人 -> 添加照片来尝试)
考虑到所有这些,我们的问题如下:
If AVCaptureSession
使用 Slide Over 和 Split View 时立即暂停,监视是个好主意吗AVCaptureSessionDidStopRunningNotification
,并向用户显示一条消息“相机已暂停”,以便他清楚地知道该应用程序没有执行扫描?
为什么行为是UIImagePickerController
不同于AVCaptureSession
?
我们可以期待苹果在未来的测试版本中的行为吗?AVCaptureSession
更改以匹配UIImagePickerController
?