以下是运行在本人iphone4上的截图,支持中文简体,中文繁体,英文,支持iphone和ipad,当然由于没有ipad,ipad的测试用的模拟器。
支持iphone4的Retina屏幕。
本来有6个标签,但是iphone的很多信息实在得不到,现在只剩下了4个标签。


这里面的电量精确到0.01,用的undocument api,但是个人感觉总是比右上角系统自己显示的偏低3%以内。


显示当前运行的进程,但是不知道如何得到进程的图标,因此统一用的图标。


一些硬件信息,iphone4的A4 cpu频率实际上得不到,始终显示为0,只好根据手机型号判断,如果是iphone4则显示800Mhz,(据说是1G的cpu降频到800Mhz)。


宣传devdiv的信息。

ipa包如下:
 FeiPhoneInfo.ipa

图标来源于网络。

每张图中右边的圆圈是ios5的手势触摸的东东。
展开来后是这个样子,可以有效的降低home键的使用。

部分信息是UIDevice里的。
电池信息可以从UIDevice batteryLevel得到,但是只能精确到0.05.

  1. - (NSDictionary*)batteryLevel
  2. {
  3. CFTypeRef blob = IOPSCopyPowerSourcesInfo();
  4. CFArrayRef sources = IOPSCopyPowerSourcesList(blob);
  5. CFDictionaryRef pSource = NULL;
  6. const void *psValue;
  7. int numOfSources = CFArrayGetCount(sources);
  8. if (numOfSources == 0)
  9. {
  10. CFRelease(blob);
  11. CFRelease(sources);
  12. NSLog(@“qhk: Error in CFArrayGetCount”);
  13. return nil;
  14. }
  15. for (int i = 0 ; i < numOfSources ; i++)
  16. {
  17. pSource = IOPSGetPowerSourceDescription(blob, CFArrayGetValueAtIndex(sources, i));
  18. if (!pSource)
  19. {
  20. CFRelease(blob);
  21. CFRelease(sources);
  22. NSLog(@“qhk: Error in IOPSGetPowerSourceDescription”);
  23. return nil;
  24. }
  25. psValue = (CFStringRef)CFDictionaryGetValue(pSource, CFSTR(kIOPSNameKey));
  26. int curCapacity = 0;
  27. int maxCapacity = 0;
  28. //                double percent;
  29. psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSCurrentCapacityKey));
  30. CFNumberGetValue((CFNumberRef)psValue, kCFNumberSInt32Type, >curCapacity);
  31. psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSMaxCapacityKey));
  32. CFNumberGetValue((CFNumberRef)psValue, kCFNumberSInt32Type, >maxCapacity);
  33. //                percent = ((double)curCapacity/(double)maxCapacity * 100.0f);
  34. NSNumber* no1 = [NSNumber numberWithInt:curCapacity];
  35. NSNumber* no2= [NSNumber numberWithInt:maxCapacity];
  36. CFRelease(blob);
  37. CFRelease(sources);
  38. return [NSDictionary dictionaryWithObjectsAndKeys:no1, @"no1", no2, @"no2", nil];
  39. //                return percent;
  40. //                return (NSInteger)(percent + 0.5f);
  41. }
  42. //#endif
  43. CFRelease(blob);
  44. CFRelease(sources);
  45. return nil;
  46. }
这个可以精确到0.01,但是好像与系统显示的仍有偏差。
得到平台号:
  1. - (NSString*) doDevicePlatform
  2. {
  3. size_t size;
  4. int nR = sysctlbyname(“hw.machine”, NULL, >size, NULL, 0);
  5. char *machine = (char *)malloc(size);
  6. nR = sysctlbyname(“hw.machine”, machine, >size, NULL, 0);
  7. NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
  8. free(machine);
  9. return platform;
  10. }
在根据平台号得到手机型号:
比如:
  1. if ([platform isEqualToString:@"iPhone1,1"])
  2. {
  3. return @“iPhone”;
  4. }
  5. if ([platform isEqualToString:@"iPhone1,2"])
  6. {
  7. return @“iPhone3G”;
  8. }
  9. if ([platform isEqualToString:@"iPhone2,1"])
  10. {
  11. return @“iPhone3GS”;
  12. }
  13. if ([platform isEqualToString:@"iPhone3,1"])
  14. {
  15. return @“iPhone4″;
  16. }
得到mac地址:
  1. - (void)printmacinfo
  2. {
  3. bool success;
  4. struct ifaddrs *addrs;
  5. const struct ifaddrs *cursor;
  6. const struct sockaddr_dl *dlAddr;
  7. const uint8_t *base;
  8. success = getifaddrs(>addrs) == 0;
  9. if (success)
  10. {
  11. cursor = addrs;
  12. NSInteger idx = 0;
  13. while (cursor != NULL)
  14. {
  15. ++idx;
  16. NSString* macTitle = nil;
  17. if ((cursor->ifa_flags > IFF_LOOPBACK) == 0 )
  18. {
  19. char* ifaname = (char *)cursor->ifa_name;
  20. char* addr = inet_ntoa(((struct sockaddr_in *)cursor->ifa_addr)->sin_addr);
  21. printf(“%s ”, ifaname);
  22. printf(“%s\n”, addr);
  23. //                                NSString* tmpstr1 = [NSString stringWithCString:ifaname encoding:NSUTF8StringEncoding];
  24. //                                NSString* tmpstr2 = [NSString stringWithCString:addr encoding:NSUTF8StringEncoding];
  25. //                                NSString *tmpStr = [NSString stringWithFormat:@"%@ %@", tmpstr1, tmpstr2];
  26. macTitle = [NSString stringWithFormat:@"%d %s %s", idx, ifaname, addr];
  27. [_arrKey addObject:macTitle];
  28. }
  29. if ( (cursor->ifa_addr->sa_family == AF_LINK)
  30. >> (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type ==IFT_ETHER)
  31. )
  32. {
  33. dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
  34. // fprintf(stderr, ” sdl_nlen = %d\n”, dlAddr->sdl_nlen);
  35. // fprintf(stderr, ” sdl_alen = %d\n”, dlAddr->sdl_alen);
  36. base = (const uint8_t *) >dlAddr->sdl_data[dlAddr->sdl_nlen];
  37. printf(“ MAC address ”);
  38. NSMutableString* tmpString = [[[NSMutableString alloc] initWithString:@“Mac:”] autorelease];
  39. for (int i = 0; i < dlAddr->sdl_alen; i++)
  40. {
  41. if (i != 0)
  42. {
  43. printf(“:”);
  44. [tmpString appendString:@":"];
  45. }
  46. printf(“%02x”, base[i]);
  47. [tmpString appendFormat:@"%02X", base[i]];
  48. }
  49. printf(“\n”);
  50. [_dic setObject:tmpString forKey:macTitle];
  51. }
  52. else if (macTitle != nil)
  53. {
  54. [_dic setObject:@"" forKey:macTitle];
  55. }
  56. cursor = cursor->ifa_next;
  57. }
  58. }
  59. }
页大小
  1. int pageSize = 0;
  2. size_t length = sizeof(pageSize);
  3. sysctlbyname(“hw.pagesize”, >pageSize, >length, NULL, 0);
得到4种内存信息:
  1. mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
  2. vm_statistics_data_t vmstat;
  3. if (host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)>vmstat, >count) != KERN_SUCCESS)
  4. {
  5. NSLog(@“Failed to get VM statistics.”);
  6. [_dic setObject:@"Failed to get VM statistics." forKey:KTTMemorySize_Wire];
  7. }
  8. else
  9. {
  10. float total = vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count;
  11. float wired = vmstat.wire_count / total * 100;
  12. float active = vmstat.active_count / total * 100;
  13. float inactive = vmstat.inactive_count / total * 100;
  14. float free = vmstat.free_count / total * 100;
  15. //                NSString *str = [NSString stringWithFormat:@"%d %d %d %d %.2f %.2f %.2f %.2f %.0f %.0f"
  16. //                                                 , vmstat.wire_count, vmstat.active_count, vmstat.inactive_count, vmstat.free_count
  17. //                                                 , wired, active, inactive, free
  18. //                                                 , total, total * pageSize
  19. //                                                 ];
  20. }
cpu和总线频率:
  1. int result;
  2. mib[0] = CTL_HW;
  3. mib[1] = HW_CPU_FREQ;
  4. length = sizeof(result);
  5. if (sysctl(mib, 2, >result, >length, NULL, 0) < 0)
  6. {
  7. perror(“getting cpu frequency”);
  8. }
  9. printf(“CPU Frequency = %u hz\n”, result);
  10. int result2;
  11. mib[0] = CTL_HW;
  12. mib[1] = HW_BUS_FREQ;
  13. length = sizeof(result2);
  14. if (sysctl(mib, 2, >result2, >length, NULL, 0) < 0)
  15. {
  16. perror(“getting bus frequency”);
  17. }
  18. printf(“Bus Frequency = %u hz\n”, result);
网络方面使用的苹果列子文档中的Reachability.h和Reachability.m
外部ip访问http://automation.whatismyip.com/n09230945.asp即可知道。
gethostbyname可知内部局域网ip。
  1. NetworkStatus netstatus = [reachable currentReachabilityStatus];
  2. switch (netstatus)
  3. {
  4. case NotReachable:
  5. // 没有网络连接
  6. reachableStatus = NSLocalizedString(@“No Network”, “”);
  7. break;
  8. case ReachableViaWWAN:
  9. // 使用3G网络
  10. reachableStatus = @“GPRS/3G”;
  11. break;
  12. case ReachableViaWiFi:
  13. // 使用WiFi网络
  14. reachableStatus = @“WIFI”;
  15. break;
  16. }
这个可知网络类型。
内存大小:
  1. size_t size = sizeof(int);
  2. int results;
  3. int mib[2] = {CTL_HW, HW_PHYSMEM};
  4. sysctl(mib, 2, >results, >size, NULL, 0);
总磁盘大小:
  1. NSDictionary *fattributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil];
  2. [fattributes objectForKey:NSFileSystemSize];
剩余空间:
  1. [fattributes objectForKey:NSFileSystemFreeSize];
手机号码:
这个也是undocument api
  1. NSString* phoneNumber = CTSettingCopyMyPhoneNumber();
  1. NSArray *getValue(NSString *iosearch)
  2. {
  3. mach_port_t          masterPort;
  4. CFTypeID             propID = (CFTypeID) NULL;
  5. unsigned int         bufSize;
  6. kern_return_t kr = IOMasterPort(MACH_PORT_NULL, >masterPort);
  7. if (kr != noErr) return nil;
  8. io_registry_entry_t entry = IORegistryGetRootEntry(masterPort);
  9. if (entry == MACH_PORT_NULL) return nil;
  10. CFTypeRef prop = IORegistryEntrySearchCFProperty(entry, kIODeviceTreePlane, (CFStringRef) iosearch, nil, kIORegistryIterateRecursively);
  11. if (!prop) return nil;
  12. propID = CFGetTypeID(prop);
  13. if (!(propID == CFDataGetTypeID()))
  14. {
  15. mach_port_deallocate(mach_task_self(), masterPort);
  16. CFRelease(prop);
  17. return nil;
  18. }
  19. CFDataRef propData = (CFDataRef) prop;
  20. if (!propData)
  21. {
  22. CFRelease(prop);
  23. return nil;
  24. }
  25. bufSize = CFDataGetLength(propData);
  26. if (!bufSize)
  27. {
  28. CFRelease(prop);
  29. return nil;
  30. }
  31. NSString *p1 = [[[NSString alloc] initWithBytes:CFDataGetBytePtr(propData) length:bufSize encoding:1] autorelease];
  32. mach_port_deallocate(mach_task_self(), masterPort);
  33. CFRelease(prop);
  34. return [p1 componentsSeparatedByString:@"\0"];
  35. }
这个可以用来得到部分数据。
  1. - (NSString *) imei
  2. {
  3. NSArray *results = getValue(@“device-imei”);
  4. if (results) return [results objectAtIndex:0];
  5. return nil;
  6. }
  7. - (NSString *) serialnumber
  8. {
  9. NSArray *results = getValue(@“serial-number”);
  10. if (results) return [results objectAtIndex:0];
  11. return nil;
  12. }
  13. - (NSString *) backlightlevel
  14. {
  15. NSArray *results = getValue(@“backlight-level”);
  16. if (results) return [results objectAtIndex:0];
  17. return nil;
  18. }
分别得到imei,序列号,背光。

显示ios设备信息的程序的更多相关文章

  1. iOS开发的另类神器:libimobiledevice开源包【类似android adb 方便获取iOS设备信息】

    简介 libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备.由于苹果官方并不支持Linux系统,但是Linux上 ...

  2. 获取iOS设备信息的编程接口

    参考资料: [1] 博客园,iOS屏幕尺寸和分辨率了解 [2] 张兴业,获取手机信息(UIDevice.NSBundle.NSLocale), CSDN

  3. 获取iOS设备信息(内存/电量/容量/型号/IP地址/当前WIFI名称)

    1.获取电池电量(一般用百分数表示,大家自行处理就好) 1 2 3 4 -(CGFloat)getBatteryQuantity {         return [[UIDevice current ...

  4. IOS 设备信息读取

    let infoDictionary = NSBundle.mainBundle().infoDictionary let appDisplayName: AnyObject? = infoDicti ...

  5. iOS 设备信息获取

    參考:http://blog.csdn.net/decajes/article/details/41807977參考:http://zengrong.net/post/2152.htm1. 获取设备的 ...

  6. [转]从命令行往 iOS 设备上安装程序

    link:http://www.stewgleadow.com/blog/2011/11/05/installing-ios-apps-on-the-device-from-the-command-l ...

  7. IOS设备信息与机型对照表

    http://blog.csdn.net/olsQ93038o99S/article/details/78374343 参考别人的文章吧....

  8. 转:向IOS设备发送推送通知

    背景 SMS 和 MMS 消息是由无线运营商通过设备的电话号码向特定设备提供的.实现 SMS/MMS 的服务器端应用程序的开发人员必须费大量精力才能与现有的封闭电信基础架构进行交互(其中包括获取电话号 ...

  9. Android开发之Ubuntu上Eclipse不显示手机设备

    一.准备工作   A.开启Android设备,用USB数据线连接到Ubuntu系统.   B.启用设备的USB调试模试    C.启动Eclipse,在Devices栏会现一个有很多???号的不明设备 ...

随机推荐

  1. android 获取字符串的方法

    字符串数组可以在value文件夹中声明: 书写的内容是: 两者的读取方式略有不同: 如果是读取数字的话,  使用: context.getResources().getStringArray( R.a ...

  2. 148. Sort List -- 时间复杂度O(n log n)

    Sort a linked list in O(n log n) time using constant space complexity. 归并排序 struct ListNode { int va ...

  3. Ansible :一个配置管理和IT自动化工具

    编译文章:LCTT  https://linux.cn/article-4215-1.html 译者: felixonmars 文章地址:https://linux.cn/article-4215-1 ...

  4. 查看Linux硬件配置信息

    在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所以建议后面使用"|mor ...

  5. 读《程序员的SQL金典》[1]--基础数据检索

    前言 <程序员的SQL金典>这本书是杨中科老师的,拜读了一下,简单做了读书笔记供以后翻阅.仅供学习分享,要想细读的话推荐购买原版呀! 这次读书的时候用了新的办法把看书计划进行了量化,虽然简 ...

  6. Go语言并发与并行学习笔记(二)

    转:http://blog.csdn.net/kjfcpua/article/details/18265461 Go语言的并发和并行 不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goro ...

  7. gitlab配置邮件通知

    配置用户提交评论.添加issue等的邮件通知: Gitlab邮件提醒方便跟踪项目进度,在这里介绍两种方式,一种是用系统的sendmail发送邮件,另一种是GMAIL的stmp来发送邮件 第一种 用系统 ...

  8. NetworkComms网络通信框架V3结构图

    NetworkComms网络通信框架序言 来自英国的c#网络通信框架,历时五年打造,由英国剑桥的2位工程师倾情开发,最新版本V3.x版本.

  9. AngularJS recursive(递归)

    工作中我们经常要遍历多层数据,如果数据是已知层级的话,用 ng-repeat 就搞定了,要是数据深度是无限的呢,或者我们要实现一个无限层级的 tree 的时候,该怎么办? 答案是使用 ng-inclu ...

  10. S1:函数上下文

    函数的上下文是可以变化的,因此,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,总之,函数本身是独立的.可以通过Function对象上的call或者appl ...