显示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栏会现一个有很多???号的不明设备 ...
随机推荐
- js 返回上一页和刷新
1. Javascript 返回上一页history.go(-1), 返回两个页面: history.go(-2); 2. history.back(). 3. window.history.forw ...
- wiki-editor语法
1.==标题== 2.::换行缩进 3.[[文件:example.png]] 图片 4.** 名字|名字 链接
- Spring注释与简化配置
在Spring 2.5及以后的版本中,提供了注释和命名空间来简化Spring的配置.下面是一些常用配置分享. 1.@Autowired注释 以前给一个Bean配置属性时,Bean必须配置< ...
- OSVERSIONINFO
OSVERSIONINFO结构 OSVERSIONINFO结构包含了操作系统的版本信息,包括操作系统的主版本号.副版本号.创建号.以及操作系统平台ID号和关于操作系统的其他描述信息.其定义为: typ ...
- 数据库索引<二> 补充前篇 (上一篇抽风了,这个补上)
在前一个创建索引中已经大概说了三部分的影响,基本应该注意哪一些.写完上一篇后我感觉有很多地方没有写清楚,所以这篇就是更深入一些的理解索引到底是怎么和数据表关联,怎么快速查询的. 先看一下下面的图,图是 ...
- 3D旋转动画
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- 绝对应当收藏的10个实用HTML5代码片段(转)
HTML5绝对是一个流行元素,受到如此多的公司组织的追捧,作为极客来说,岂能错过呢?在今天这篇文章中,我们将分享一些超实用的HTML5的代码片段,相信大家一定会喜欢! 正确的嵌入flash 如果你经常 ...
- JS对象的写法
写法1: <script> var database = function () { function add(){ console.info("add"); } fu ...
- CSS 去除列表项li前面的小圆点
前言 在默认的情况下,浏览器会在<li>标签前面加上小圆点形成列表项,如下所示使用<ul> 项1 项2 项3 或者使用<ol> 项1 项2 项3 这在有时候确实给我 ...
- js 替换 当前URL 特定参数
js 替换 当前URL 特定参数 2012-12-24 20:45:53| 分类: JS&JQuery |举报 |字号 订阅 //替换指定传入参数的值,paramName为参数,repl ...