-2

我正在创建一个应用程序,我需要在其中启动相机并扫描 QR 码。我正在使用一个扫描仪启动的类。它在 iPhone 中很好,但在 iPad 中崩溃。我正在使用代码

if(![[appDelegate.tabbarcontroller.viewControllers objectAtIndex:1] isMovingFromParentViewController]) { 
    [[appDelegate.tabbarcontroller.viewControllers objectAtIndex:1] popToRootViewControllerAnimated:NO];
}
4

2 回答 2

2

在 iOS 中使用防御性编程是防止崩溃的非常好的策略。

关于您的问题,来自 Apple doc:

要使用包含其默认控件的图像选择器控制器,请执行以下步骤:

验证设备是否能够从所需的来源中挑选内容。执行此操作调用 isSourceTypeAvailable: 类方法,提供来自“UIImagePickerControllerSourceType”枚举的常量。

通过调用 availableMediaTypesForSourceType: 类方法,检查哪些媒体类型对于您正在使用的源类型可用。这使您可以区分可用于视频录制的相机和仅可用于静止图像的相机。

Mugunth Kumariphone-tutorial-better-way-to-check-capabilities-of-ios-devices链接提供了检查设备功能所需的信息。

希望能帮助到你。

于 2012-05-24T11:36:35.827 回答
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

        }
    }];
}
于 2017-02-27T07:21:43.270 回答