1

实用程序.m

+(AVAuthorizationStatus)getAuthorizationStatus {
    NSString *mediaType = AVMediaTypeAudio;
    __block AVAuthorizationStatus AuthStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
    if(AuthStatus == AVAuthorizationStatusNotDetermined) {
        [AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {
            AuthStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
        }];
    }
    NSLog(@"%d",AuthStatus);
    return AuthStatus;
}

+(ALAuthorizationStatus)getALAssetAuthorizationStatus {
    ALAssetsLibrary *aLib = [[ALAssetsLibrary alloc]init];

    ALAuthorizationStatus alAuthStatus;

    [aLib enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:nil failureBlock:nil];

    alAuthStatus = [ALAssetsLibrary authorizationStatus];

    NSLog(@"Status=>%d", [ALAssetsLibrary authorizationStatus]);

    return alAuthStatus;
}

在我的实用程序类中,我编写了这两种方法,目的只是为了告诉授权状态是什么。

如果用户已经alloweddenied权限,这些方法将正常工作,但这些方法第一次要求用户权限并且授权状态为not determined. 如果用户allowdeny我第一次没有获得更新的授权状态。如何处理?

4

1 回答 1

3

在 requestAccessForMediaType 的完成处理程序中,而不是重新调用 authorizationStatusForMediaType,您只需要引用传递给块的“授予”布尔值(您当前未使用)。

我知道这是一个老问题,但我在寻找相关内容时偶然发现了这个问题,并认为我会为可能找到它的其他人回答这个问题。

于 2015-03-30T19:29:20.870 回答