显示ios设备信息的程序
以下是运行在本人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.
- - (NSDictionary*)batteryLevel
- {
- CFTypeRef blob = IOPSCopyPowerSourcesInfo();
- CFArrayRef sources = IOPSCopyPowerSourcesList(blob);
- CFDictionaryRef pSource = NULL;
- const void *psValue;
- int numOfSources = CFArrayGetCount(sources);
- if (numOfSources == 0)
- {
- CFRelease(blob);
- CFRelease(sources);
- NSLog(@“qhk: Error in CFArrayGetCount”);
- return nil;
- }
- for (int i = 0 ; i < numOfSources ; i++)
- {
- pSource = IOPSGetPowerSourceDescription(blob, CFArrayGetValueAtIndex(sources, i));
- if (!pSource)
- {
- CFRelease(blob);
- CFRelease(sources);
- NSLog(@“qhk: Error in IOPSGetPowerSourceDescription”);
- return nil;
- }
- psValue = (CFStringRef)CFDictionaryGetValue(pSource, CFSTR(kIOPSNameKey));
- int curCapacity = 0;
- int maxCapacity = 0;
- // double percent;
- psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSCurrentCapacityKey));
- CFNumberGetValue((CFNumberRef)psValue, kCFNumberSInt32Type, >curCapacity);
- psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSMaxCapacityKey));
- CFNumberGetValue((CFNumberRef)psValue, kCFNumberSInt32Type, >maxCapacity);
- // percent = ((double)curCapacity/(double)maxCapacity * 100.0f);
- NSNumber* no1 = [NSNumber numberWithInt:curCapacity];
- NSNumber* no2= [NSNumber numberWithInt:maxCapacity];
- CFRelease(blob);
- CFRelease(sources);
- return [NSDictionary dictionaryWithObjectsAndKeys:no1, @"no1", no2, @"no2", nil];
- // return percent;
- // return (NSInteger)(percent + 0.5f);
- }
- //#endif
- CFRelease(blob);
- CFRelease(sources);
- return nil;
- }
- - (NSString*) doDevicePlatform
- {
- size_t size;
- int nR = sysctlbyname(“hw.machine”, NULL, >size, NULL, 0);
- char *machine = (char *)malloc(size);
- nR = sysctlbyname(“hw.machine”, machine, >size, NULL, 0);
- NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
- free(machine);
- return platform;
- }
比如:
- if ([platform isEqualToString:@"iPhone1,1"])
- {
- return @“iPhone”;
- }
- if ([platform isEqualToString:@"iPhone1,2"])
- {
- return @“iPhone3G”;
- }
- if ([platform isEqualToString:@"iPhone2,1"])
- {
- return @“iPhone3GS”;
- }
- if ([platform isEqualToString:@"iPhone3,1"])
- {
- return @“iPhone4″;
- }
- - (void)printmacinfo
- {
- bool success;
- struct ifaddrs *addrs;
- const struct ifaddrs *cursor;
- const struct sockaddr_dl *dlAddr;
- const uint8_t *base;
- success = getifaddrs(>addrs) == 0;
- if (success)
- {
- cursor = addrs;
- NSInteger idx = 0;
- while (cursor != NULL)
- {
- ++idx;
- NSString* macTitle = nil;
- if ((cursor->ifa_flags > IFF_LOOPBACK) == 0 )
- {
- char* ifaname = (char *)cursor->ifa_name;
- char* addr = inet_ntoa(((struct sockaddr_in *)cursor->ifa_addr)->sin_addr);
- printf(“%s ”, ifaname);
- printf(“%s\n”, addr);
- // NSString* tmpstr1 = [NSString stringWithCString:ifaname encoding:NSUTF8StringEncoding];
- // NSString* tmpstr2 = [NSString stringWithCString:addr encoding:NSUTF8StringEncoding];
- // NSString *tmpStr = [NSString stringWithFormat:@"%@ %@", tmpstr1, tmpstr2];
- macTitle = [NSString stringWithFormat:@"%d %s %s", idx, ifaname, addr];
- [_arrKey addObject:macTitle];
- }
- if ( (cursor->ifa_addr->sa_family == AF_LINK)
- >> (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type ==IFT_ETHER)
- )
- {
- dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
- // fprintf(stderr, ” sdl_nlen = %d\n”, dlAddr->sdl_nlen);
- // fprintf(stderr, ” sdl_alen = %d\n”, dlAddr->sdl_alen);
- base = (const uint8_t *) >dlAddr->sdl_data[dlAddr->sdl_nlen];
- printf(“ MAC address ”);
- NSMutableString* tmpString = [[[NSMutableString alloc] initWithString:@“Mac:”] autorelease];
- for (int i = 0; i < dlAddr->sdl_alen; i++)
- {
- if (i != 0)
- {
- printf(“:”);
- [tmpString appendString:@":"];
- }
- printf(“%02x”, base[i]);
- [tmpString appendFormat:@"%02X", base[i]];
- }
- printf(“\n”);
- [_dic setObject:tmpString forKey:macTitle];
- }
- else if (macTitle != nil)
- {
- [_dic setObject:@"" forKey:macTitle];
- }
- cursor = cursor->ifa_next;
- }
- }
- }
- int pageSize = 0;
- size_t length = sizeof(pageSize);
- sysctlbyname(“hw.pagesize”, >pageSize, >length, NULL, 0);
- mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
- vm_statistics_data_t vmstat;
- if (host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)>vmstat, >count) != KERN_SUCCESS)
- {
- NSLog(@“Failed to get VM statistics.”);
- [_dic setObject:@"Failed to get VM statistics." forKey:KTTMemorySize_Wire];
- }
- else
- {
- float total = vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count;
- float wired = vmstat.wire_count / total * 100;
- float active = vmstat.active_count / total * 100;
- float inactive = vmstat.inactive_count / total * 100;
- float free = vmstat.free_count / total * 100;
- // NSString *str = [NSString stringWithFormat:@"%d %d %d %d %.2f %.2f %.2f %.2f %.0f %.0f"
- // , vmstat.wire_count, vmstat.active_count, vmstat.inactive_count, vmstat.free_count
- // , wired, active, inactive, free
- // , total, total * pageSize
- // ];
- }
- int result;
- mib[0] = CTL_HW;
- mib[1] = HW_CPU_FREQ;
- length = sizeof(result);
- if (sysctl(mib, 2, >result, >length, NULL, 0) < 0)
- {
- perror(“getting cpu frequency”);
- }
- printf(“CPU Frequency = %u hz\n”, result);
- int result2;
- mib[0] = CTL_HW;
- mib[1] = HW_BUS_FREQ;
- length = sizeof(result2);
- if (sysctl(mib, 2, >result2, >length, NULL, 0) < 0)
- {
- perror(“getting bus frequency”);
- }
- printf(“Bus Frequency = %u hz\n”, result);
外部ip访问http://automation.whatismyip.com/n09230945.asp即可知道。
gethostbyname可知内部局域网ip。
- NetworkStatus netstatus = [reachable currentReachabilityStatus];
- switch (netstatus)
- {
- case NotReachable:
- // 没有网络连接
- reachableStatus = NSLocalizedString(@“No Network”, “”);
- break;
- case ReachableViaWWAN:
- // 使用3G网络
- reachableStatus = @“GPRS/3G”;
- break;
- case ReachableViaWiFi:
- // 使用WiFi网络
- reachableStatus = @“WIFI”;
- break;
- }
- size_t size = sizeof(int);
- int results;
- int mib[2] = {CTL_HW, HW_PHYSMEM};
- sysctl(mib, 2, >results, >size, NULL, 0);
- NSDictionary *fattributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil];
- [fattributes objectForKey:NSFileSystemSize];
- [fattributes objectForKey:NSFileSystemFreeSize];
这个也是undocument api
- NSString* phoneNumber = CTSettingCopyMyPhoneNumber();
- NSArray *getValue(NSString *iosearch)
- {
- mach_port_t masterPort;
- CFTypeID propID = (CFTypeID) NULL;
- unsigned int bufSize;
- kern_return_t kr = IOMasterPort(MACH_PORT_NULL, >masterPort);
- if (kr != noErr) return nil;
- io_registry_entry_t entry = IORegistryGetRootEntry(masterPort);
- if (entry == MACH_PORT_NULL) return nil;
- CFTypeRef prop = IORegistryEntrySearchCFProperty(entry, kIODeviceTreePlane, (CFStringRef) iosearch, nil, kIORegistryIterateRecursively);
- if (!prop) return nil;
- propID = CFGetTypeID(prop);
- if (!(propID == CFDataGetTypeID()))
- {
- mach_port_deallocate(mach_task_self(), masterPort);
- CFRelease(prop);
- return nil;
- }
- CFDataRef propData = (CFDataRef) prop;
- if (!propData)
- {
- CFRelease(prop);
- return nil;
- }
- bufSize = CFDataGetLength(propData);
- if (!bufSize)
- {
- CFRelease(prop);
- return nil;
- }
- NSString *p1 = [[[NSString alloc] initWithBytes:CFDataGetBytePtr(propData) length:bufSize encoding:1] autorelease];
- mach_port_deallocate(mach_task_self(), masterPort);
- CFRelease(prop);
- return [p1 componentsSeparatedByString:@"\0"];
- }
- - (NSString *) imei
- {
- NSArray *results = getValue(@“device-imei”);
- if (results) return [results objectAtIndex:0];
- return nil;
- }
- - (NSString *) serialnumber
- {
- NSArray *results = getValue(@“serial-number”);
- if (results) return [results objectAtIndex:0];
- return nil;
- }
- - (NSString *) backlightlevel
- {
- NSArray *results = getValue(@“backlight-level”);
- if (results) return [results objectAtIndex:0];
- return nil;
- }
显示ios设备信息的程序的更多相关文章
- iOS开发的另类神器:libimobiledevice开源包【类似android adb 方便获取iOS设备信息】
简介 libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备.由于苹果官方并不支持Linux系统,但是Linux上 ...
- 获取iOS设备信息的编程接口
参考资料: [1] 博客园,iOS屏幕尺寸和分辨率了解 [2] 张兴业,获取手机信息(UIDevice.NSBundle.NSLocale), CSDN
- 获取iOS设备信息(内存/电量/容量/型号/IP地址/当前WIFI名称)
1.获取电池电量(一般用百分数表示,大家自行处理就好) 1 2 3 4 -(CGFloat)getBatteryQuantity { return [[UIDevice current ...
- IOS 设备信息读取
let infoDictionary = NSBundle.mainBundle().infoDictionary let appDisplayName: AnyObject? = infoDicti ...
- iOS 设备信息获取
參考:http://blog.csdn.net/decajes/article/details/41807977參考:http://zengrong.net/post/2152.htm1. 获取设备的 ...
- [转]从命令行往 iOS 设备上安装程序
link:http://www.stewgleadow.com/blog/2011/11/05/installing-ios-apps-on-the-device-from-the-command-l ...
- IOS设备信息与机型对照表
http://blog.csdn.net/olsQ93038o99S/article/details/78374343 参考别人的文章吧....
- 转:向IOS设备发送推送通知
背景 SMS 和 MMS 消息是由无线运营商通过设备的电话号码向特定设备提供的.实现 SMS/MMS 的服务器端应用程序的开发人员必须费大量精力才能与现有的封闭电信基础架构进行交互(其中包括获取电话号 ...
- Android开发之Ubuntu上Eclipse不显示手机设备
一.准备工作 A.开启Android设备,用USB数据线连接到Ubuntu系统. B.启用设备的USB调试模试 C.启动Eclipse,在Devices栏会现一个有很多???号的不明设备 ...
随机推荐
- 封装jquery时用到的东西
顺序都是瞎拍的,就是明显分割用 1.将函数封装成$(' ')这种形式 把函数名起成$ $(各种选择器) $(selector) 2.有时候jquery可以继续加点,返回自己本身的元素 创建个构造函数, ...
- python 写入csv文件
import csv fieldnames = ['Column1', 'Column2', 'Column3', 'Column4'] rows = [{'Column1': '0', 'Col ...
- 定向转发和重定向实现 <select >下拉表单数据传送
定向转发的特点: (1). 实行转发时浏览器上的网址不变 (如果你这点忽视了,那你就要接受我无尽的鄙视吧! 哇咔咔~~~) (2). 实行转发时 : 只有一次请求. 不信,看这下面的 ...
- CSS 声明( Declarations )
CSS 声明1可以为空,或者由 CSS 特性( property ),后加一个冒号 ":",跟着是一个特性的值构成.中间可以有空格将它们隔开. 可用以下方式表达: property ...
- 修改WAMPServer中MySql中文乱码的方法
修改MySql的配置文件my.ini,在[client]段落增加:default-character-set=utf8;在[mysqld]段落增加:character_set_server=utf8; ...
- linux ps命令介绍
来源<鸟哥的linux私房菜> ps:将某个时间点的程序运作情况撷取下来 [root@linux ~]# ps aux [root@linux ~]# ps -lA [root@linux ...
- groupadd命令详解(实例)
groupadd命令详解(实例) 1.作用groupadd命令用于将新组加入系统. 2.格式groupadd [-g gid] [-o]] [-r] [-f] groupname 3.主要参数-g ...
- 二模 (3) day1
第一题: 题目描述: 一个数列定义如下:f(1) = 1,f(2) = 1,f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.给定 A,B 和 n 的值,要求计算 ...
- ICTCLA中科院分词工具用法(java)
摘要:为解决中文搜索的问题,最开始使用PHP版开源的SCWS,但是处理人名和地名时,会出现截断人名地名出现错误.开始使用NLPIR分词,在分词准确性上效果要比SCWS好.本文介绍如何在windows系 ...
- IT公司100题-14-排序数组中和为给定值的两个数字
问题描述: 输入一个升序排序的数组,给定一个目标值target,求数组的两个数a和b,a+b=target.如果有多个组合满足这个条件,输出任意一对即可. 例如,输入升序数组[1, 3, 4, 5, ...