iOS开发~设备信息

来源:互联网 发布:计数排序java实现 编辑:程序博客网 时间:2024/06/10 10:20

参考了很多帖子,最后根据项目需求,修正了一些错误,总结了一个相对更全面一些的公用模块:


[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface UIDevice (Info)  
  4.   
  5. + (NSString *) device;               //设备类型(x86_64 iPod5,1)  
  6. + (NSString *) deviceModel;          //设备模式(iPad iPod iPhone)  
  7. + (NSString *) osVersion;            //系统版本  
  8. + (NSString *) os;                   //平台  
  9. + (NSString *) carrier;              //运营商  
  10. + (NSString *) resolution;           //分辨率  
  11. + (NSString *) locale;               //地域  
  12. + (NSString *) appVersion;           //程序版本  
  13. + (NSNumber *) timestamp;            //unix timestamp  
  14. + (NSString *) cpuType;              //cpu型号  
  15. + (NSString *) cpuFrequency;         //cpu频率  
  16. + (NSUInteger) cpuCount;             //cpu核数  
  17. + (NSArray  *) cpuUsage;             //cpu利用率  
  18. + (NSUInteger) totalMemoryBytes;     //获取手机内存总量,返回的是字节数  
  19. + (NSUInteger) freeMemoryBytes;      //获取手机可用内存,返回的是字节数  
  20. + (long  long) freeDiskSpaceBytes;   //获取手机硬盘空闲空间,返回的是字节数  
  21. + (long  long) totalDiskSpaceBytes;  //获取手机硬盘总空间,返回的是字节数  
  22. + (BOOL      ) isJailBreak;          //是否越狱  
  23. + (BOOL      ) bluetoothCheck;       //是否支持蓝牙  
  24.   
  25. @end  

[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #import "UIDevice+Info.h"  
  2. #import <CoreTelephony/CTTelephonyNetworkInfo.h>  
  3. #import <CoreTelephony/CTCarrier.h>  
  4. #import <mach/mach.h>  
  5. #import <mach/mach_host.h>  
  6. #import <sys/types.h>  
  7. #import <sys/param.h>  
  8. #import <sys/mount.h>  
  9. #import <mach/processor_info.h>  
  10. #include <sys/types.h>  
  11. #include <sys/sysctl.h>  
  12. #include <sys/socket.h>  
  13. #include <sys/sysctl.h>  
  14. #include <sys/stat.h>  
  15. #include <net/if.h>  
  16. #include <net/if_dl.h>  
  17.   
  18.   
  19.   
  20. #define IFPGA_NAMESTRING                @"iFPGA"  
  21.   
  22. #define IPHONE_1G_NAMESTRING            @"iPhone 1G"  
  23. #define IPHONE_3G_NAMESTRING            @"iPhone 3G"  
  24. #define IPHONE_3GS_NAMESTRING           @"iPhone 3GS"  
  25. #define IPHONE_4_NAMESTRING             @"iPhone 4"  
  26. #define IPHONE_4S_NAMESTRING            @"iPhone 4S"  
  27. #define IPHONE_5_NAMESTRING             @"iPhone 5"  
  28. #define IPHONE_UNKNOWN_NAMESTRING       @"Unknown iPhone"  
  29.   
  30. #define IPOD_1G_NAMESTRING              @"iPod touch 1G"  
  31. #define IPOD_2G_NAMESTRING              @"iPod touch 2G"  
  32. #define IPOD_3G_NAMESTRING              @"iPod touch 3G"  
  33. #define IPOD_4G_NAMESTRING              @"iPod touch 4G"  
  34. #define IPOD_UNKNOWN_NAMESTRING         @"Unknown iPod"  
  35.   
  36. #define IPAD_1G_NAMESTRING              @"iPad 1G"  
  37. #define IPAD_2G_NAMESTRING              @"iPad 2G"  
  38. #define IPAD_3G_NAMESTRING              @"iPad 3G"  
  39. #define IPAD_4G_NAMESTRING              @"iPad 4G"  
  40. #define IPAD_UNKNOWN_NAMESTRING         @"Unknown iPad"  
  41.   
  42. #define APPLETV_2G_NAMESTRING           @"Apple TV 2G"  
  43. #define APPLETV_3G_NAMESTRING           @"Apple TV 3G"  
  44. #define APPLETV_4G_NAMESTRING           @"Apple TV 4G"  
  45. #define APPLETV_UNKNOWN_NAMESTRING      @"Unknown Apple TV"  
  46.   
  47. #define IOS_FAMILY_UNKNOWN_DEVICE       @"Unknown iOS device"  
  48.   
  49. #define SIMULATOR_NAMESTRING            @"iPhone Simulator"  
  50. #define SIMULATOR_IPHONE_NAMESTRING     @"iPhone Simulator"  
  51. #define SIMULATOR_IPAD_NAMESTRING       @"iPad Simulator"  
  52. #define SIMULATOR_APPLETV_NAMESTRING    @"Apple TV Simulator" // :)  
  53.   
  54. //iPhone 3G 以后各代的CPU型号和频率  
  55. #define IPHONE_3G_CPUTYPE               @"ARM11"  
  56. #define IPHONE_3G_CPUFREQUENCY          @"412MHz"  
  57. #define IPHONE_3GS_CPUTYPE              @"ARM Cortex A8"  
  58. #define IPHONE_3GS_CPUFREQUENCY         @"600MHz"  
  59. #define IPHONE_4_CPUTYPE                @"Apple A4"  
  60. #define IPHONE_4_CPUFREQUENCY           @"1GMHz"  
  61. #define IPHONE_4S_CPUTYPE               @"Apple A5 Double Core"  
  62. #define IPHONE_4S_CPUFREQUENCY          @"800MHz"  
  63.   
  64. //iPod touch 4G 的CPU型号和频率  
  65. #define IPOD_4G_CPUTYPE                 @"Apple A4"  
  66. #define IPOD_4G_CPUFREQUENCY            @"800MHz"  
  67.   
  68. #define IOS_CPUTYPE_UNKNOWN             @"Unknown CPU type"  
  69. #define IOS_CPUFREQUENCY_UNKNOWN        @"Unknown CPU frequency"  
  70.   
  71. typedef enum {  
  72.     UIDeviceUnknown,  
  73.       
  74.     UIDeviceSimulator,  
  75.     UIDeviceSimulatoriPhone,  
  76.     UIDeviceSimulatoriPad,  
  77.     UIDeviceSimulatorAppleTV,  
  78.       
  79.     UIDevice1GiPhone,  
  80.     UIDevice3GiPhone,  
  81.     UIDevice3GSiPhone,  
  82.     UIDevice4iPhone,  
  83.     UIDevice4SiPhone,  
  84.     UIDevice5iPhone,  
  85.       
  86.     UIDevice1GiPod,  
  87.     UIDevice2GiPod,  
  88.     UIDevice3GiPod,  
  89.     UIDevice4GiPod,  
  90.       
  91.     UIDevice1GiPad,  
  92.     UIDevice2GiPad,  
  93.     UIDevice3GiPad,  
  94.     UIDevice4GiPad,  
  95.       
  96.     UIDeviceAppleTV2,  
  97.     UIDeviceAppleTV3,  
  98.     UIDeviceAppleTV4,  
  99.       
  100.     UIDeviceUnknowniPhone,  
  101.     UIDeviceUnknowniPod,  
  102.     UIDeviceUnknowniPad,  
  103.     UIDeviceUnknownAppleTV,  
  104.     UIDeviceIFPGA,  
  105.       
  106. } UIDevicePlatform;  
  107.   
  108. typedef enum {  
  109.     UIDeviceFamilyiPhone,  
  110.     UIDeviceFamilyiPod,  
  111.     UIDeviceFamilyiPad,  
  112.     UIDeviceFamilyAppleTV,  
  113.     UIDeviceFamilyUnknown,  
  114.       
  115. } UIDeviceFamily;  
  116.   
  117. @implementation UIDevice (Info)  
  118.   
  119. + (NSString *)device  
  120. {  
  121.     size_t size;  
  122.     sysctlbyname("hw.machine"NULL, &size, NULL0);  
  123.     charchar *machine = malloc(size);  
  124.     sysctlbyname("hw.machine", machine, &size, NULL0);  
  125.     NSString *platform = [NSString stringWithUTF8String:machine];  
  126.     free(machine);  
  127.     return platform;  
  128. }  
  129.   
  130. + (NSString *) deviceModel  
  131. {  
  132.     NSString *model = [[UIDevice currentDevice] model];  
  133.     if ([model hasPrefix:@"iPad"]) {  
  134.         return @"iPad";  
  135.     } else if ([model hasPrefix:@"iPod"]) {  
  136.         return @"iPod";  
  137.     } else if ([model hasPrefix:@"iPhone"]){  
  138.         return @"iPhone";  
  139.     }  
  140.       
  141.     return nil;  
  142. }  
  143.   
  144. + (NSString *)osVersion  
  145. {  
  146.     return [[UIDevice currentDevice] systemVersion];  
  147. }  
  148.   
  149. + (NSString*)os  
  150. {  
  151.     return @"iOS";  
  152. }  
  153.   
  154. + (NSString *)carrier  
  155. {  
  156.     if (NSClassFromString(@"CTTelephonyNetworkInfo"))  
  157.     {  
  158.         CTTelephonyNetworkInfo *netinfo = [[[CTTelephonyNetworkInfo alloc] init] autorelease];  
  159.         CTCarrier *carrier = [netinfo subscriberCellularProvider];  
  160.         return [carrier carrierName];  
  161.     }  
  162.       
  163.     return @"";  
  164. }  
  165.   
  166. + (NSString *)resolution  
  167. {  
  168.     CGRect bounds = [[UIScreen mainScreen] bounds];  
  169.     CGFloat scale = [[UIScreen mainScreen] respondsToSelector:@selector(scale)] ? [[UIScreen mainScreen] scale] : 1.f;  
  170.     CGSize res = CGSizeMake(bounds.size.width * scale, bounds.size.height * scale);  
  171.     NSString *result = [NSString stringWithFormat:@"%gx%g", res.width, res.height];  
  172.       
  173.     return result;  
  174. }  
  175.   
  176. + (NSString *)locale  
  177. {  
  178.     return [[NSLocale currentLocale] localeIdentifier];  
  179. }  
  180.   
  181. + (NSString *)appVersion  
  182. {  
  183.     return [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];  
  184. }  
  185.   
  186. + (NSNumber *)timestamp  
  187. {  
  188.     return [NSNumber numberWithLong:time(NULL)];  
  189. }  
  190.   
  191. #pragma mark sysctlbyname utils  
  192. + (NSString *) getSysInfoByName:(charchar *)typeSpecifier  
  193. {  
  194.     size_t size;  
  195.     sysctlbyname(typeSpecifier, NULL, &size, NULL0);  
  196.       
  197.     charchar *answer = malloc(size);  
  198.     sysctlbyname(typeSpecifier, answer, &size, NULL0);  
  199.       
  200.     NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];  
  201.       
  202.     free(answer);  
  203.     return results;  
  204. }  
  205.   
  206. #pragma mark platform information  
  207. + (NSString *) platform  
  208. {  
  209.     return [self getSysInfoByName:"hw.machine"];  
  210. }  
  211.   
  212. + (NSUInteger) platformType  
  213. {  
  214.     NSString *platform = [self platform];  
  215.       
  216.     // The ever mysterious iFPGA  
  217.     if ([platform isEqualToString:@"iFPGA"])        return UIDeviceIFPGA;  
  218.       
  219.     // iPhone  
  220.     if ([platform isEqualToString:@"iPhone1,1"])    return UIDevice1GiPhone;  
  221.     if ([platform isEqualToString:@"iPhone1,2"])    return UIDevice3GiPhone;  
  222.     if ([platform hasPrefix:@"iPhone2"])            return UIDevice3GSiPhone;  
  223.     if ([platform hasPrefix:@"iPhone3"])            return UIDevice4iPhone;  
  224.     if ([platform hasPrefix:@"iPhone4"])            return UIDevice4SiPhone;  
  225.     if ([platform hasPrefix:@"iPhone5"])            return UIDevice5iPhone;  
  226.       
  227.     // iPod  
  228.     if ([platform hasPrefix:@"iPod1"])              return UIDevice1GiPod;  
  229.     if ([platform hasPrefix:@"iPod2"])              return UIDevice2GiPod;  
  230.     if ([platform hasPrefix:@"iPod3"])              return UIDevice3GiPod;  
  231.     if ([platform hasPrefix:@"iPod4"])              return UIDevice4GiPod;  
  232.       
  233.     // iPad  
  234.     if ([platform hasPrefix:@"iPad1"])              return UIDevice1GiPad;  
  235.     if ([platform hasPrefix:@"iPad2"])              return UIDevice2GiPad;  
  236.     if ([platform hasPrefix:@"iPad3"])              return UIDevice3GiPad;  
  237.     if ([platform hasPrefix:@"iPad4"])              return UIDevice4GiPad;  
  238.       
  239.     // Apple TV  
  240.     if ([platform hasPrefix:@"AppleTV2"])           return UIDeviceAppleTV2;  
  241.     if ([platform hasPrefix:@"AppleTV3"])           return UIDeviceAppleTV3;  
  242.       
  243.     if ([platform hasPrefix:@"iPhone"])             return UIDeviceUnknowniPhone;  
  244.     if ([platform hasPrefix:@"iPod"])               return UIDeviceUnknowniPod;  
  245.     if ([platform hasPrefix:@"iPad"])               return UIDeviceUnknowniPad;  
  246.     if ([platform hasPrefix:@"AppleTV"])            return UIDeviceUnknownAppleTV;  
  247.       
  248.     // Simulator thanks Jordan Breeding  
  249.     if ([platform hasSuffix:@"86"] || [platform isEqual:@"x86_64"])  
  250.     {  
  251.         BOOL smallerScreen = [[UIScreen mainScreen] bounds].size.width < 768;  
  252.         return smallerScreen ? UIDeviceSimulatoriPhone : UIDeviceSimulatoriPad;  
  253.     }  
  254.       
  255.     return UIDeviceUnknown;  
  256. }  
  257.   
  258. + (NSString *) platformString  
  259. {  
  260.     switch ([self platformType])  
  261.     {  
  262.         case UIDevice1GiPhonereturn IPHONE_1G_NAMESTRING;  
  263.         case UIDevice3GiPhonereturn IPHONE_3G_NAMESTRING;  
  264.         case UIDevice3GSiPhonereturn IPHONE_3GS_NAMESTRING;  
  265.         case UIDevice4iPhonereturn IPHONE_4_NAMESTRING;  
  266.         case UIDevice4SiPhonereturn IPHONE_4S_NAMESTRING;  
  267.         case UIDevice5iPhonereturn IPHONE_5_NAMESTRING;  
  268.         case UIDeviceUnknowniPhonereturn IPHONE_UNKNOWN_NAMESTRING;  
  269.               
  270.         case UIDevice1GiPodreturn IPOD_1G_NAMESTRING;  
  271.         case UIDevice2GiPodreturn IPOD_2G_NAMESTRING;  
  272.         case UIDevice3GiPodreturn IPOD_3G_NAMESTRING;  
  273.         case UIDevice4GiPodreturn IPOD_4G_NAMESTRING;  
  274.         case UIDeviceUnknowniPodreturn IPOD_UNKNOWN_NAMESTRING;  
  275.               
  276.         case UIDevice1GiPad : return IPAD_1G_NAMESTRING;  
  277.         case UIDevice2GiPad : return IPAD_2G_NAMESTRING;  
  278.         case UIDevice3GiPad : return IPAD_3G_NAMESTRING;  
  279.         case UIDevice4GiPad : return IPAD_4G_NAMESTRING;  
  280.         case UIDeviceUnknowniPad : return IPAD_UNKNOWN_NAMESTRING;  
  281.               
  282.         case UIDeviceAppleTV2 : return APPLETV_2G_NAMESTRING;  
  283.         case UIDeviceAppleTV3 : return APPLETV_3G_NAMESTRING;  
  284.         case UIDeviceAppleTV4 : return APPLETV_4G_NAMESTRING;  
  285.         case UIDeviceUnknownAppleTVreturn APPLETV_UNKNOWN_NAMESTRING;  
  286.               
  287.         case UIDeviceSimulatorreturn SIMULATOR_NAMESTRING;  
  288.         case UIDeviceSimulatoriPhonereturn SIMULATOR_IPHONE_NAMESTRING;  
  289.         case UIDeviceSimulatoriPadreturn SIMULATOR_IPAD_NAMESTRING;  
  290.         case UIDeviceSimulatorAppleTVreturn SIMULATOR_APPLETV_NAMESTRING;  
  291.               
  292.         case UIDeviceIFPGAreturn IFPGA_NAMESTRING;  
  293.               
  294.         defaultreturn IOS_FAMILY_UNKNOWN_DEVICE;  
  295.     }  
  296. }  
  297.   
  298. #pragma mark sysctl utils  
  299. + (NSUInteger) getSysInfo: (uint) typeSpecifier  
  300. {  
  301.     size_t size = sizeof(int);  
  302.     int results;  
  303.     int mib[2] = {CTL_HW, typeSpecifier};  
  304.     sysctl(mib, 2, &results, &size, NULL0);  
  305.     return (NSUInteger) results;  
  306. }  
  307.   
  308. #pragma mark cpu information  
  309. + (NSString *) cpuType  
  310. {  
  311.     switch ([self platformType])  
  312.     {  
  313.         case UIDevice3GiPhonereturn IPHONE_3G_CPUTYPE;  
  314.         case UIDevice3GSiPhonereturn IPHONE_3GS_CPUTYPE;  
  315.         case UIDevice4iPhonereturn IPHONE_4_CPUTYPE;  
  316.         case UIDevice4SiPhonereturn IPHONE_4S_CPUTYPE;  
  317.         case UIDevice4GiPodreturn IPOD_4G_CPUTYPE;  
  318.         defaultreturn IOS_CPUTYPE_UNKNOWN;  
  319.     }  
  320. }  
  321.   
  322. + (NSString *) cpuFrequency  
  323. {  
  324.     switch ([self platformType])  
  325.     {  
  326.         case UIDevice3GiPhonereturn IPHONE_3G_CPUFREQUENCY;  
  327.         case UIDevice3GSiPhonereturn IPHONE_3GS_CPUFREQUENCY;  
  328.         case UIDevice4iPhonereturn IPHONE_4_CPUFREQUENCY;  
  329.         case UIDevice4SiPhonereturn IPHONE_4S_CPUFREQUENCY;  
  330.         case UIDevice4GiPodreturn IPOD_4G_CPUFREQUENCY;  
  331.         defaultreturn IOS_CPUFREQUENCY_UNKNOWN;  
  332.     }  
  333. }  
  334.   
  335. + (NSUInteger) cpuCount  
  336. {  
  337.     return [self getSysInfo:HW_NCPU];  
  338. }  
  339.   
  340. + (NSArray *)cpuUsage  
  341. {  
  342.     NSMutableArray *usage = [NSMutableArray array];  
  343.     //    float usage = 0;  
  344.     processor_info_array_t _cpuInfo, _prevCPUInfo = nil;  
  345.     mach_msg_type_number_t _numCPUInfo, _numPrevCPUInfo = 0;  
  346.     unsigned _numCPUs;  
  347.     NSLock *_cpuUsageLock;  
  348.       
  349.     int _mib[2U] = { CTL_HW, HW_NCPU };  
  350.     size_t _sizeOfNumCPUs = sizeof(_numCPUs);  
  351.     int _status = sysctl(_mib, 2U, &_numCPUs, &_sizeOfNumCPUs, NULL0U);  
  352.     if(_status)  
  353.         _numCPUs = 1;  
  354.       
  355.     _cpuUsageLock = [[NSLock alloc] init];  
  356.       
  357.     natural_t _numCPUsU = 0U;  
  358.     kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &_numCPUsU, &_cpuInfo, &_numCPUInfo);  
  359.     if(err == KERN_SUCCESS) {  
  360.         [_cpuUsageLock lock];  
  361.           
  362.         for(unsigned i = 0U; i < _numCPUs; ++i) {  
  363.             Float32 _inUse, _total;  
  364.             if(_prevCPUInfo) {  
  365.                 _inUse = (  
  366.                           (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER]   - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])  
  367.                           + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])  
  368.                           + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE]   - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])  
  369.                           );  
  370.                 _total = _inUse + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);  
  371.             } else {  
  372.                 _inUse = _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];  
  373.                 _total = _inUse + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];  
  374.             }  
  375.               
  376.             //            NSLog(@"Core : %u, Usage: %.2f%%", i, _inUse / _total * 100.f);  
  377.             float u = _inUse / _total * 100.f;  
  378.             [usage addObject:[NSNumber numberWithFloat:u]];  
  379.         }  
  380.           
  381.         [_cpuUsageLock unlock];  
  382.           
  383.         if(_prevCPUInfo) {  
  384.             size_t prevCpuInfoSize = sizeof(integer_t) * _numPrevCPUInfo;  
  385.             vm_deallocate(mach_task_self(), (vm_address_t)_prevCPUInfo, prevCpuInfoSize);  
  386.         }  
  387.           
  388.         _prevCPUInfo = _cpuInfo;  
  389.         _numPrevCPUInfo = _numCPUInfo;  
  390.           
  391.         _cpuInfo = nil;  
  392.         _numCPUInfo = 0U;  
  393.     } else {  
  394.         NSLog(@"Error!");  
  395.     }  
  396.     return usage;  
  397. }  
  398.   
  399. #pragma mark memory information  
  400. + (NSUInteger) totalMemoryBytes  
  401. {  
  402.     return [self getSysInfo:HW_PHYSMEM];  
  403. }  
  404.   
  405. + (NSUInteger) freeMemoryBytes  
  406. {  
  407.     mach_port_t           host_port = mach_host_self();  
  408.     mach_msg_type_number_t   host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);  
  409.     vm_size_t               pagesize;  
  410.     vm_statistics_data_t     vm_stat;  
  411.       
  412.     host_page_size(host_port, &pagesize);  
  413.       
  414.     if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) NSLog(@"Failed to fetch vm statistics");  
  415.       
  416.     //    natural_t   mem_used = (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count) * pagesize;  
  417.     natural_t   mem_free = vm_stat.free_count * pagesize;  
  418.     //    natural_t   mem_total = mem_used + mem_free;  
  419.       
  420.     return mem_free;  
  421. }  
  422.   
  423. #pragma mark disk information  
  424. + (long long) freeDiskSpaceBytes  
  425. {  
  426.     struct statfs buf;  
  427.     long long freespace;  
  428.     freespace = 0;  
  429.     if(statfs("/private/var", &buf) >= 0){  
  430.         freespace = (long long)buf.f_bsize * buf.f_bfree;  
  431.     }  
  432.     return freespace;  
  433. }  
  434.   
  435. + (long long) totalDiskSpaceBytes  
  436. {  
  437.     struct statfs buf;  
  438.     long long totalspace;  
  439.     totalspace = 0;  
  440.     if(statfs("/private/var", &buf) >= 0){  
  441.         totalspace = (long long)buf.f_bsize * buf.f_blocks;  
  442.     }  
  443.     return totalspace;  
  444. }  
  445.   
  446. + (BOOL) isJailBreak  
  447. {  
  448. //    int res = access("/var/mobile/Library/AddressBook/AddressBook.sqlitedb", F_OK);  
  449. //    if (res != 0)  
  450. //        return NO;  
  451. //    return YES;  
  452.       
  453.     BOOL jailbroken = NO;  
  454.     NSString *cydiaPath = @"/Applications/Cydia.app";  
  455.     NSString *aptPath = @"/private/var/lib/apt/";  
  456.     if ([[NSFileManager defaultManager] fileExistsAtPath:cydiaPath]) {  
  457.         jailbroken = YES;  
  458.     }  
  459.     if ([[NSFileManager defaultManager] fileExistsAtPath:aptPath]) {  
  460.         jailbroken = YES;  
  461.     }  
  462.     return jailbroken;  
  463. }  
  464.   
  465. #pragma mark bluetooth information  
  466. + (BOOL) bluetoothCheck  
  467. {  
  468.     switch ([self platformType])  
  469.     {  
  470.         case UIDevice3GiPhonereturn YES;  
  471.         case UIDevice3GSiPhonereturn YES;  
  472.         case UIDevice4iPhonereturn YES;  
  473.         case UIDevice4SiPhonereturn YES;  
  474.         case UIDevice5iPhonereturn YES;  
  475.               
  476.         case UIDevice3GiPodreturn YES;  
  477.         case UIDevice4GiPodreturn YES;  
  478.               
  479.         case UIDevice1GiPad : return YES;  
  480.         case UIDevice2GiPad : return YES;  
  481.         case UIDevice3GiPad : return YES;  
  482.         case UIDevice4GiPad : return YES;  
  483.               
  484.         defaultreturn NO;  
  485.     }  
  486. }  
  487.   
  488. @end  
0 0
原创粉丝点击