iOS 一些设备信息的获取方法

设备启动时间

- (NSString *)bootTimeInSec
{
    NSString *temp = [NSString stringWithFormat:@"%ld",bootSecTime()];
//    NSLog(@"bootTimeInSec : %@",temp);
    return temp;
}
static time_t bootSecTime(){
    struct timeval boottime;
    size_t len = sizeof(boottime);
    int mib[2] = {CTL_KERN, KERN_BOOTTIME};
    if( sysctl(mib, 2, &boottime, &len, NULL, 0) < 0)
    {
        return 0;
    }
    return boottime.tv_sec;
}

国家

- (NSString *)countryCode
{
    NSLocale *locale = [NSLocale currentLocale];
    NSString *countryCode = [locale objectForKey:NSLocaleCountryCode];
//    NSLog(@"countryCode : %@",countryCode);
    
    return countryCode;
}

语言

// 语言
- (NSString *)language {
    
    NSString *language;
    NSLocale *locale = [NSLocale currentLocale];
    if ([[NSLocale preferredLanguages] count] > 0) {
        language = [[NSLocale preferredLanguages]objectAtIndex:0];
        
    } else {
        language = [locale objectForKey:NSLocaleLanguageCode];
        
    }
//    NSLog(@"language : %@",language);
    
    return language;
}

设备名称

- (NSString *)deviceName
{
    
    if ([[[UIDevice currentDevice] name] length] == 0) {
        return @"";
    }
    
// md5 32位 小写
    NSString *deviceName = [CryptionUtils MD5ForLower32Bate:[[UIDevice currentDevice] name]];
//    NSLog(@"deviceName : %@",deviceName);
    return deviceName;
    
}

系统版本

- (NSString *)systemVersion
{
    NSString *version = [[UIDevice currentDevice] systemVersion];
    return version;
    
}

设备machine

- (NSString *)machine
{
    NSString *machine =getSystemHardwareByName(SIDFAMachine);
//    NSLog(@"machine: %@",machine);
    return machine == nil ? @"" : machine;
    
}
static const char *SIDFAMachine = "hw.machine";
static NSString *getSystemHardwareByName(const char *typeSpecifier)
{
    size_t size;
    sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);
    char *answer = malloc(size);
    sysctlbyname(typeSpecifier, answer, &size, NULL,0); NSString *results = [NSString stringWithUTF8String:answer]; 
    free(answer);
    return results;
}

设备model

static const char *SIDFAModel = "hw.model";
- (NSString *)model
{
    NSString *model =getSystemHardwareByName(SIDFAModel);
//    NSLog(@"model : %@", model);
    return model == nil ? @"" : model;
}

运营商

- (NSString *)carrierInfo {
#if TARGET_IPHONE_SIMULATOR
    return @"SIMULATOR";
#else
    static dispatch_queue_t _queue;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        _queue = dispatch_queue_create([[NSString stringWithFormat:@"com.carr.%@", self] UTF8String], NULL);
    });
        __block NSString *carr = nil;
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        dispatch_async(_queue, ^{
            CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
            CTCarrier *carrier = nil;
            if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 12.1) {
                if ([info respondsToSelector:@selector(serviceSubscriberCellularProviders)]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
                    NSArray *carrierKeysArray = [info.serviceSubscriberCellularProviders.allKeys sortedArrayUsingSelector:@selector(compare:)];
                    carrier = info.serviceSubscriberCellularProviders
                    [carrierKeysArray.firstObject];
                    if (!carrier.mobileNetworkCode) {
                        carrier =info.serviceSubscriberCellularProviders
                        [carrierKeysArray.lastObject];
                    }
#pragma clang diagnostic pop
                }
            }
            
            if(!carrier) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
                carrier = info.subscriberCellularProvider;
#pragma clang diagnostic pop
            }
            if (carrier != nil) {
                NSString *networkCode = [carrier mobileNetworkCode];
                NSString *countryCode = [carrier mobileCountryCode];
                if (countryCode && [countryCode isEqualToString:@"460"] && networkCode) {
                    if ([networkCode isEqualToString:@"00"] ||
                        [networkCode isEqualToString:@"02"] ||
                        [networkCode isEqualToString:@"07"] ||
                        [networkCode isEqualToString:@"08"]) {
                        carr= @"中国移动";
                    }
                    if ([networkCode isEqualToString:@"01"] ||
                        [networkCode isEqualToString:@"06"] ||
                        [networkCode isEqualToString:@"09"]) {
                        carr= @"中国联通";
                    }
                    if ([networkCode isEqualToString:@"03"] ||
                        [networkCode isEqualToString:@"05"] ||
                        [networkCode isEqualToString:@"11"]) {
                        carr= @"中国电信";
                    }
                    if ([networkCode isEqualToString:@"04"]) {
                        carr= @"中国卫通";
                    }
                    if ([networkCode isEqualToString:@"20"]) {
                        carr= @"中国铁通";
                    }
                } else {
                    carr = [carrier.carrierName copy];
                }
                if (carr.length <= 0) {
                    carr = @"unknown";
                }
                dispatch_semaphore_signal(semaphore);
            }
        });
        dispatch_time_t t = dispatch_time(DISPATCH_TIME_NOW, 0.5*NSEC_PER_SEC);
        dispatch_semaphore_wait(semaphore, t);
        return [carr copy];
#endif
}

物理内存

- (NSString *)memory
{
    return [NSString stringWithFormat:@"%lld", [NSProcessInfo processInfo].physicalMemory];
}

硬盘容量

- (NSString *)disk
{
    int64_t space = -1;
    NSError *error = nil;
    NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
    if (!error) {
        space = [[attrs objectForKey:NSFileSystemSize] longLongValue];
    }
    
    if(space < 0) {
        space = -1;
    }
    NSString *temp = [NSString stringWithFormat:@"%lld",space];
//    NSLog(@"disk : %@", temp);
    return temp;
}

系统更新时间

- (NSString *)sysFileTime
{
    NSString *result = @"";
    NSString *information = @"L3Zhci9tb2JpbGUvTGlicmFyeS9Vc2VyQ29uZmlndXJhdGlvblByb2ZpbGVzL1B1YmxpY0luZm8vTUNNZXRhLnBsaXN0";
    NSData *data=[[NSData alloc]initWithBase64EncodedString:information options:0] ;
    NSString *dataString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSError *error = nil;
    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:dataString error:&error];
    if (fileAttributes) {
        id singleAttibute = [fileAttributes objectForKey:NSFileCreationDate];
        if ([singleAttibute isKindOfClass:[NSDate class]]) {
            NSDate *dataDate = singleAttibute;
            result = [NSString stringWithFormat:@"%f",[dataDate timeIntervalSince1970]];
        }
    }
//    NSLog(@"sysFileTime : %@", result);
    return result;
}

时区

- (NSString *) timeZone
{
    NSInteger offset = [NSTimeZone systemTimeZone].secondsFromGMT;
    NSString *temp = [NSString stringWithFormat:@"%ld",(long)offset];
    return temp;
}

国际区号

- (NSString *)internationalCode {
    // 1. 先获取手机号所在的国家地区码
    NSString *interCode = @"";
    NSString *mccCountryCode = [self MCCCountryCode];
    
    // 2. 根据国家地区码映射国际区号
    // 例如: 中国的国家地区码为 460   对应的国际区号为 86
    // 部分国家 地区码对应的国际区号请参考: https://www.mobibrw.com/2018/10871
    if ([mccCountryCode isEqualToString:@"460"]) {
        interCode = @"86";
    }
    
    return interCode;
     
}

国家地区码

- (NSString *)MCCCountryCode {
#if TARGET_IPHONE_SIMULATOR
    return @"SIMULATOR";
#else
    static dispatch_queue_t _queue;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        _queue = dispatch_queue_create([[NSString stringWithFormat:@"com.carr.%@", self] UTF8String], NULL);
    });
        __block NSString *mccCountryCode = nil;
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        dispatch_async(_queue, ^{
            CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
            CTCarrier *carrier = nil;
            if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 12.1) {
                if ([info respondsToSelector:@selector(serviceSubscriberCellularProviders)]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
                    NSArray *carrierKeysArray = [info.serviceSubscriberCellularProviders.allKeys sortedArrayUsingSelector:@selector(compare:)];
                    carrier = info.serviceSubscriberCellularProviders
                    [carrierKeysArray.firstObject];
                    if (!carrier.mobileNetworkCode) {
                        carrier =info.serviceSubscriberCellularProviders
                        [carrierKeysArray.lastObject];
                    }
#pragma clang diagnostic pop
                }
            }
            
            if(!carrier) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
                carrier = info.subscriberCellularProvider;
#pragma clang diagnostic pop
            }
            if (carrier != nil) {
                mccCountryCode = [carrier mobileCountryCode];
                

                
                dispatch_semaphore_signal(semaphore);
            }
        });
        dispatch_time_t t = dispatch_time(DISPATCH_TIME_NOW, 0.5*NSEC_PER_SEC);
        dispatch_semaphore_wait(semaphore, t);
    
        // countryCode 为国家/地区码
        //
    
        return [mccCountryCode copy];
#endif
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容