250 lines
10 KiB
Objective-C
250 lines
10 KiB
Objective-C
|
|
|
|
// Created by wuwei on 14-5-30.
|
|
// Copyright (c) 2014年 YY Inc. All rights reserved.
|
|
|
|
|
|
#import <UIKit/UIKit.h>
|
|
#import <AVFoundation/AVFoundation.h>
|
|
#import <AssetsLibrary/AssetsLibrary.h>
|
|
#import <sys/utsname.h>
|
|
|
|
#import "YYUtility.h"
|
|
#import "YYReachability.h"
|
|
#import "SSKeychain.h"
|
|
#import "GCDHelper.h"
|
|
|
|
@implementation YYUtility (Device)
|
|
|
|
+ (NSString *)systemVersion
|
|
{
|
|
static NSString* _systemVersion = nil;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
_systemVersion = [UIDevice currentDevice].systemVersion;
|
|
});
|
|
|
|
if (_systemVersion) {
|
|
return _systemVersion;
|
|
}
|
|
|
|
return [UIDevice currentDevice].systemVersion;
|
|
}
|
|
|
|
+ (NSString *)identifierForVendor
|
|
{
|
|
static NSString *idfv = nil;
|
|
if (!idfv) {
|
|
idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
|
|
}
|
|
return idfv;
|
|
}
|
|
|
|
+ (NSString *)deviceUniqueIdentification {
|
|
NSString * currentDeviceUUIDStr = [SSKeychain passwordForService:@" " account:@"uuid"];
|
|
if (currentDeviceUUIDStr == nil || [currentDeviceUUIDStr isEqualToString:@""]) {
|
|
NSUUID * currentDeviceUUID = [UIDevice currentDevice].identifierForVendor;
|
|
currentDeviceUUIDStr = currentDeviceUUID.UUIDString;
|
|
currentDeviceUUIDStr = [currentDeviceUUIDStr stringByReplacingOccurrencesOfString:@"-" withString:@""];
|
|
currentDeviceUUIDStr = [currentDeviceUUIDStr lowercaseString];
|
|
[SSKeychain setPassword: currentDeviceUUIDStr forService:@" "account:@"uuid"];
|
|
}
|
|
return currentDeviceUUIDStr;
|
|
}
|
|
|
|
+ (NSInteger)networkStatus
|
|
{
|
|
return (self.reachability.currentReachabilityStatus);
|
|
}
|
|
|
|
+ (YYReachability *)reachability
|
|
{
|
|
static YYReachability *reachability = nil;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
reachability = [YYReachability reachabilityForInternetConnection];
|
|
});
|
|
return reachability;
|
|
}
|
|
|
|
|
|
+ (void)checkCameraAvailable:(void (^)(void))available denied:(void(^)(void))denied restriction:(void(^)(void))restriction
|
|
{
|
|
available = available ? : ^{};
|
|
denied = denied ? : ^{};
|
|
restriction = restriction ? : ^{};
|
|
|
|
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
|
|
{
|
|
|
|
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
|
|
switch (authStatus) {
|
|
case AVAuthorizationStatusAuthorized:
|
|
{
|
|
available();
|
|
break;
|
|
}
|
|
case AVAuthorizationStatusDenied:
|
|
{
|
|
|
|
denied();
|
|
break;
|
|
}
|
|
case AVAuthorizationStatusRestricted:
|
|
{
|
|
// NOTE: 这个跟[设置-通用-访问限制]似乎没有关系
|
|
restriction();
|
|
break;
|
|
}
|
|
case AVAuthorizationStatusNotDetermined:
|
|
{
|
|
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
|
|
|
|
dispatch_main_sync_safe(^{
|
|
if (granted)
|
|
{
|
|
available();
|
|
}
|
|
else
|
|
{
|
|
denied();
|
|
}
|
|
|
|
});
|
|
|
|
}];
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
restriction();
|
|
}
|
|
}
|
|
|
|
+ (void)checkAssetsLibrayAvailable:(void (^)(void))available denied:(void(^)(void))denied restriction:(void(^)(void))restriction
|
|
{
|
|
available = available ? : ^{};
|
|
denied = denied ? : ^{};
|
|
restriction = restriction ? : ^{};
|
|
|
|
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary] ||
|
|
[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {
|
|
ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
|
|
if (author == ALAuthorizationStatusNotDetermined) {
|
|
ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];
|
|
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
|
|
if (*stop) {
|
|
available();
|
|
return;
|
|
}
|
|
*stop = TRUE;
|
|
} failureBlock:^(NSError *error) {
|
|
denied();
|
|
}];
|
|
}else if (author == ALAuthorizationStatusDenied) {
|
|
denied();
|
|
}else if(author == ALAuthorizationStatusRestricted) {
|
|
restriction();
|
|
}else if(author == ALAuthorizationStatusAuthorized) {
|
|
available();
|
|
}
|
|
}else {
|
|
restriction();
|
|
}
|
|
}
|
|
|
|
+ (NSString*)modelType {
|
|
|
|
struct utsname systemInfo;
|
|
|
|
uname(&systemInfo);
|
|
|
|
NSString*platform = [NSString stringWithCString: systemInfo.machine encoding:NSASCIIStringEncoding];
|
|
|
|
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
|
|
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
|
|
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
|
|
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
|
|
if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
|
|
if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
|
|
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
|
|
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
|
|
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
|
|
if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
|
|
if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
|
|
if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
|
|
if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
|
|
if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
|
|
if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
|
|
if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
|
|
if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
|
|
if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
|
|
if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
|
|
if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
|
|
if([platform isEqualToString:@"iPhone10,1"]) return @"iPhone 8";
|
|
if([platform isEqualToString:@"iPhone10,4"]) return @"iPhone 8";
|
|
if([platform isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus";
|
|
if([platform isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus";
|
|
if([platform isEqualToString:@"iPhone10,3"]) return @"iPhone X";
|
|
if([platform isEqualToString:@"iPhone10,6"]) return @"iPhone X";
|
|
if ([platform isEqualToString:@"iPhone11,8"]) return @"iPhone XR";
|
|
if ([platform isEqualToString:@"iPhone11,2"]) return @"iPhone XS";
|
|
if ([platform isEqualToString:@"iPhone11,6"]) return @"iPhone XS Max";
|
|
if ([platform isEqualToString:@"iPhone11,4"]) return @"iPhone XS Max";
|
|
if ([platform isEqualToString:@"iPhone12,1"]) return @"iPhone 11";
|
|
if ([platform isEqualToString:@"iPhone12,3"]) return @"iPhone 11 Pro";
|
|
if ([platform isEqualToString:@"iPhone12,5"]) return @"iPhone 11 Pro Max";
|
|
if ([platform isEqualToString:@"iPhone12,8"]) return @"iPhone SE(2nd generation)";
|
|
if ([platform isEqualToString:@"iPhone13,1"]) return @"iPhone 12 mini";
|
|
if ([platform isEqualToString:@"iPhone13,2"]) return @"iPhone 12";
|
|
if ([platform isEqualToString:@"iPhone13,3"]) return @"iPhone 12 Pro";
|
|
if ([platform isEqualToString:@"iPhone13,4"]) return @"iPhone 12 Pro Max";
|
|
if ([platform isEqualToString:@"iPhone14,4"]) return @"iPhone 13 mini";
|
|
if ([platform isEqualToString:@"iPhone14,5"]) return @"iPhone 13";
|
|
if ([platform isEqualToString:@"iPhone14,2"]) return @"iPhone 13 Pro";
|
|
if ([platform isEqualToString:@"iPhone14,3"]) return @"iPhone 13 Pro Max";
|
|
if ([platform isEqualToString:@"iPhone14,6"]) return @"iPhone SE (3rd generation)";
|
|
if ([platform isEqualToString:@"iPhone14,7"]) return @"iPhone 14";
|
|
if ([platform isEqualToString:@"iPhone14,8"]) return @"iPhone 14 Plus";
|
|
if ([platform isEqualToString:@"iPhone15,2"]) return @"iPhone 14 Pro";
|
|
if ([platform isEqualToString:@"iPhone15,3"]) return @"iPhone 14 Pro Max";
|
|
if ([platform isEqualToString:@"iPhone15,4"]) return @"iPhone 15";
|
|
if ([platform isEqualToString:@"iPhone15,5"]) return @"iPhone 15 Plus";
|
|
if ([platform isEqualToString:@"iPhone16,1"]) return @"iPhone 15 Pro";
|
|
if ([platform isEqualToString:@"iPhone16,2"]) return @"iPhone 15 Pro Max";
|
|
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
|
|
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
|
|
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
|
|
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
|
|
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
|
|
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1G";
|
|
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2";
|
|
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2";
|
|
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2";
|
|
if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2";
|
|
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1G";
|
|
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1G";
|
|
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1G";
|
|
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3";
|
|
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3";
|
|
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3";
|
|
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4";
|
|
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4";
|
|
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4";
|
|
if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air";
|
|
if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air";
|
|
if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air";
|
|
if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G";
|
|
if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G";
|
|
if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G";
|
|
if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator";
|
|
if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator";
|
|
return platform;
|
|
}
|
|
|
|
@end
|