ios-unity/Classes_cocos/permission/LBXPermissionPhotos.m
2022-11-25 15:08:47 +08:00

132 lines
3.8 KiB
Objective-C

//
// LBXPermissionPhotos.m
// LBXKits
//
#import "LBXPermissionPhotos.h"
#import <Photos/Photos.h>
#import <AssetsLibrary/AssetsLibrary.h>
@implementation LBXPermissionPhotos
+ (BOOL)authorized
{
return [self authorizationStatus] == 3;
}
/**
photo permission status
@return
0 :NotDetermined
1 :Restricted
2 :Denied
3 :Authorized
*/
+ (NSInteger)authorizationStatus
{
if (@available(iOS 8,*))
{
return [PHPhotoLibrary authorizationStatus];
}
else
{
return [ALAssetsLibrary authorizationStatus];
}
}
+ (void)authorizeWithCompletion:(void(^)(BOOL granted,BOOL firstTime))completion
{
if (@available(iOS 8.0, *)) {
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
switch (status) {
case PHAuthorizationStatusAuthorized:
{
if (completion) {
completion(YES,NO);
}
}
break;
case PHAuthorizationStatusRestricted:
case PHAuthorizationStatusDenied:
{
if (completion) {
completion(NO,NO);
}
}
break;
case PHAuthorizationStatusNotDetermined:
{
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (completion) {
dispatch_async(dispatch_get_main_queue(), ^{
completion(status == PHAuthorizationStatusAuthorized,YES);
});
}
}];
}
break;
default:
{
if (completion) {
completion(NO,NO);
}
}
break;
}
}else{
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
switch (status) {
case ALAuthorizationStatusAuthorized:
{
if (completion) {
completion(YES, NO);
}
}
break;
case ALAuthorizationStatusNotDetermined:
{
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:^(ALAssetsGroup *assetGroup, BOOL *stop) {
if (*stop) {
if (completion) {
dispatch_async(dispatch_get_main_queue(), ^{
completion(YES, NO);
});
}
} else {
*stop = YES;
}
}
failureBlock:^(NSError *error) {
if (completion) {
dispatch_async(dispatch_get_main_queue(), ^{
completion(NO, YES);
});
}
}];
} break;
case ALAuthorizationStatusRestricted:
case ALAuthorizationStatusDenied:
{
if (completion) {
completion(NO, NO);
}
}
break;
}
}
}
@end