我正在创建一个应用程序,我需要启动相机并扫描QR码。我正在使用扫描仪启动的课程。它在iPhone上很好但在iPad上崩溃了。 我正在使用代码
if(![[appDelegate.tabbarcontroller.viewControllers objectAtIndex:1] isMovingFromParentViewController]) {
[[appDelegate.tabbarcontroller.viewControllers objectAtIndex:1] popToRootViewControllerAnimated:NO];
}
答案 0 :(得分:2)
在iOS中使用防御性编程是防止崩溃的一个非常好的策略。
关于您的问题,来自Apple doc:
要使用包含其默认控件的图像选择控制器, 执行以下步骤:
验证设备是否能够从所需内容中挑选内容 资源。这样做调用isSourceTypeAvailable:class方法, 从“UIImagePickerControllerSourceType”提供常量 枚举。
检查源类型的可用媒体类型 您正在使用,通过调用availableMediaTypesForSourceType:类 方法。这使您可以区分可以使用的相机 视频录制和仅可用于静止图像的视频。
Mugunth Kumar 提供的链接iphone-tutorial-better-way-to-check-capabilities-of-ios-devices提供了解决设备功能所需的信息。
希望它有所帮助。
答案 1 :(得分:0)
您可以使用以下代码检查AVAuthorization状态 使用媒体时。
/*
// Media types
AVF_EXPORT NSString *const AVMediaTypeVideo NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeAudio NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeText NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeClosedCaption NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeSubtitle NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeTimecode NS_AVAILABLE(10_7, 4_0);
AVF_EXPORT NSString *const AVMediaTypeMetadata NS_AVAILABLE(10_8, 6_0);
AVF_EXPORT NSString *const AVMediaTypeMuxed NS_AVAILABLE(10_7, 4_0);
*/
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if(status == AVAuthorizationStatusAuthorized)
{
// authorized
NSLog(@"authorized");
}
else if(status == AVAuthorizationStatusDenied)
{
// denied
NSLog(@"denied");
}
else if(status == AVAuthorizationStatusRestricted)
{
// restricted
NSLog(@"restricted");
}
else if(status == AVAuthorizationStatusNotDetermined)
{
// not determined
NSLog(@"not determined");
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
if(granted){ // Access has been granted ..do something
} else { // Access denied ..do something
}
}];
}