- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的应用中,我想在用户按下相机按钮时请求相机访问权限,这会将他带到基于 AVFoundation 的相机实时预览。
该 View 是使用“现在模态转场”呈现的。
所以在我的 ViewController 中,我目前覆盖了 shouldPerformSegue()
并在用户授予权限或已经授予权限时返回 true,否则返回 false。
如果用户没有授予访问权限,我会显示一个警报,他可以在其中转到设置以更改权限。这是在 showPermissionInfo()
中完成的。
我的问题是,AVCaptureDevice.requestAccess
被异步调用,因此在我检查它之前 hasCameraPermission
没有设置为 true。有没有办法以阻塞的方式调用这些限制访问?谢谢!
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if identifier == "Modally_ToCameraViewController"
{
var hasCameraPermission = false
if AVCaptureDevice.authorizationStatus(for: .video) == .authorized
{
hasCameraPermission = true
} else {
AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in
if granted {
hasCameraPermission = true
} else {
hasCameraPermission = false
}
})
}
if(!hasCameraPermission){
showPermissionInfo()
}
return hasCameraPermission
}
return true
}
最佳答案
一个简单的解决方案是创建一个信号量并等待它直到调用完成闭包。 semaphore.wait
将阻塞当前线程,直到调用 semaphore.signal
。
let semaphore = DispatchSemaphore(value: 0)
AVCaptureDevice.requestAccess(for: .video, completionHandler: { (granted: Bool) in
if granted {
hasCameraPermission = true
} else {
hasCameraPermission = false
}
semaphore.signal()
})
semaphore.wait()
关于ios - 运行 AVCaptureDevice.requestAccess 阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51191369/
我使用 Swift 3.0 和 Xcode 8 Beta 2 创建了一个 iOS 单 View 应用程序。我正在链接 AVFoundation.framework。 这是我的 View Control
在我的应用中,我想在用户按下相机按钮时请求相机访问权限,这会将他带到基于 AVFoundation 的相机实时预览。 该 View 是使用“现在模态转场”呈现的。 所以在我的 ViewControll
使用 Xcode 10.1 和 Swift 4.2 我有一个复杂的应用程序,它使用在 AppDelegate 中实现的 UINavigationController。 navigationContro
我需要提示用户音频许可,以便在我的iOS项目中进一步使用WebRTC。我已将NSMicrophoneUsageDescription添加到info.plist并尝试遵循以下代码,但即使AVCaptur
我在 iOS 9 中请求日历访问时遇到了一个奇怪的案例。该逻辑在所有 iOS 10 设备上都运行良好。 在我们的例子中,我们在工具栏上添加了一个按钮,用户点击该按钮可将事件添加到他们的日历中。 因此,
我正在打开 EKAuthorizationStatus,但即使在 requestAuthorisation(to:commit:) 被调用并返回 true 并且没有错误时,switch 语句仍然与 匹
我尝试通过向AVAuthorizationStatus注入.notDefined值来重置摄像机权限。我可以在下面的代码中看到AVCaptureDevice.questAccess(for:.Video
我是一名优秀的程序员,十分优秀!