iOS常用系统信息获取方法
一、手机电量获取,方法二需要导入头文件#import<objc/runtime.h>
方法一、获取电池电量(一般用百分数表示,大家自行处理就好)
- -(CGFloat)getBatteryQuantity
- {
- return [[UIDevice currentDevice] batteryLevel];
- }
方法二、
- - (int)getCurrentBatteryLevel
- {
- UIApplication *app = [UIApplication sharedApplication];
- if (app.applicationState == UIApplicationStateActive||
- app.applicationState==UIApplicationStateInactive)
- {
- Ivar ivar= class_getInstanceVariable([app class],"_statusBar");
- id status = object_getIvar(app, ivar);
- for (id aview in [status subviews])
- {
- int batteryLevel = ;
- for (id bview in [aview subviews])
- {
- if ([NSStringFromClass([bview class]) caseInsensitiveCompare:@"UIStatusBarBatteryItemView"]
- == NSOrderedSame&&[[[UIDevice currentDevice] systemVersion] floatValue] >=6.0)
- {
- Ivar ivar = class_getInstanceVariable([bview class],"_capacity");
- if(ivar)
- {
- batteryLevel = ((int (*)(id, Ivar))object_getIvar)(bview, ivar);
- //这种方式也可以
- /*ptrdiff_t offset = ivar_getOffset(ivar);
- unsigned char *stuffBytes = (unsigned char *)(__bridge void *)bview;
- batteryLevel = * ((int *)(stuffBytes + offset));*/
- if (batteryLevel > && batteryLevel <= ){
- return batteryLevel;
- }
- else{
- return ;
- }
- }
- }
- }
- }
- }
- return ;
- }
二、获取手机电池状态(UIDeviceBatteryState为枚举类型)
- // UIDeviceBatteryStateUnknown:无法取得充电状态情况
- // UIDeviceBatteryStateUnplugged:非充电状态
- // UIDeviceBatteryStateCharging:充电状态
- // UIDeviceBatteryStateFull:充满状态(连接充电器充满状态)
- -(UIDeviceBatteryState)getBatteryStauts
- {
- UIDevice *device = [UIDevice currentDevice];
- device.batteryMonitoringEnabled = YES;
- return device.batteryState;
- }
三、获取手机总运行内存大小
- //3.获取总内存大小
- -(NSString *)getTotalMemorySize
- {
- return [self fileSizeToString:[NSProcessInfo processInfo].physicalMemory];
- }
- -(NSString *)fileSizeToString:(unsigned long long)fileSize
- {
- NSInteger KB = ;
- NSInteger MB = KB*KB;
- NSInteger GB = MB*KB;
- if (fileSize < ) {
- return @"0 B";
- }else if (fileSize < KB) {
- return @"< 1 KB";
- }else if (fileSize < MB) {
- return [NSString stringWithFormat:@"%.1f KB",((CGFloat)fileSize)/KB];
- }else if (fileSize < GB) {
- return [NSString stringWithFormat:@"%.1f MB",((CGFloat)fileSize)/MB];
- }else {
- return [NSString stringWithFormat:@"%.1f GB",((CGFloat)fileSize)/GB];
- }
- }
四、获取当前剩余内存和已用内存,需要添加头文件#import <sys/sysctl.h> 和#import <mach/mach.h>
- // 获取当前设备可用内存(单位:MB)
- - (double)availableMemory
- {
- vm_statistics_data_t vmStats;
- mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;
- kern_return_t kernReturn = host_statistics(mach_host_self(),
- HOST_VM_INFO,
- (host_info_t)&vmStats,
- &infoCount);
- if (kernReturn != KERN_SUCCESS) {
- return NSNotFound;
- }
- return ((vm_page_size *vmStats.free_count) / 1024.0) / 1024.0;
- }
- // 获取当前任务所占用的内存(单位:MB)
- - (double)usedMemory
- {
- task_basic_info_data_t taskInfo;
- mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;
- kern_return_t kernReturn = task_info(mach_task_self(),
- TASK_BASIC_INFO,
- (task_info_t)&taskInfo,
- &infoCount);
- if (kernReturn != KERN_SUCCESS
- ) {
- return NSNotFound;
- }
- return taskInfo.resident_size / 1024.0 / 1024.0;
- }
五、获取手机型号,需要添加头文件#import<sys/utsname.h>
- + (NSString *)getCurrentiPhoneType
- {
- struct utsname systemInfo;
- uname(&systemInfo);
- NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
- if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
- if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
- if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
- if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
- if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
- if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
- if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
- if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
- if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
- if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
- if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
- if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
- if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
- if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
- if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
- if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
- if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
- if([platform isEqualToString:@"iPhone8,4"]) return@"iPhone SE";
- if([platform isEqualToString:@"iPhone9,1"]) return@"iPhone 7";
- if([platform isEqualToString:@"iPhone9,2"]) return@"iPhone 7 Plus";
- if([platform isEqualToString:@"iPhone10,1"]) return@"iPhone 8";
- if([platform isEqualToString:@"iPhone10,4"]) return@"iPhone 8";
- if([platform isEqualToString:@"iPhone10,2"]) return@"iPhone 8 Plus";
- if([platform isEqualToString:@"iPhone10,5"]) return@"iPhone 8 Plus";
- if([platform isEqualToString:@"iPhone10,3"]) return@"iPhone X";
- if([platform isEqualToString:@"iPhone10,6"]) return@"iPhone X";
- if([platform isEqualToString:@"iPod1,1"]) return@"iPod Touch 1G";
- if([platform isEqualToString:@"iPod2,1"]) return@"iPod Touch 2G";
- if([platform isEqualToString:@"iPod3,1"]) return@"iPod Touch 3G";
- if([platform isEqualToString:@"iPod4,1"]) return@"iPod Touch 4G";
- if([platform isEqualToString:@"iPod5,1"]) return@"iPod Touch 5G";
- if([platform isEqualToString:@"iPad1,1"]) return@"iPad 1G";
- if([platform isEqualToString:@"iPad2,1"]) return@"iPad 2";
- if([platform isEqualToString:@"iPad2,2"]) return@"iPad 2";
- if([platform isEqualToString:@"iPad2,3"]) return@"iPad 2";
- if([platform isEqualToString:@"iPad2,4"]) return@"iPad 2";
- if([platform isEqualToString:@"iPad2,5"]) return@"iPad Mini 1G";
- if([platform isEqualToString:@"iPad2,6"]) return@"iPad Mini 1G";
- if([platform isEqualToString:@"iPad2,7"]) return@"iPad Mini 1G";
- if([platform isEqualToString:@"iPad3,1"]) return@"iPad 3";
- if([platform isEqualToString:@"iPad3,2"]) return@"iPad 3";
- if([platform isEqualToString:@"iPad3,3"]) return@"iPad 3";
- if([platform isEqualToString:@"iPad3,4"]) return@"iPad 4";
- if([platform isEqualToString:@"iPad3,5"]) return@"iPad 4";
- if([platform isEqualToString:@"iPad3,6"]) return@"iPad 4";
- if([platform isEqualToString:@"iPad4,1"]) return@"iPad Air";
- if([platform isEqualToString:@"iPad4,2"]) return@"iPad Air";
- if([platform isEqualToString:@"iPad4,3"]) return@"iPad Air";
- if([platform isEqualToString:@"iPad4,4"]) return@"iPad Mini 2G";
- if([platform isEqualToString:@"iPad4,5"]) return@"iPad Mini 2G";
- if([platform isEqualToString:@"iPad4,6"]) return@"iPad Mini 2G";
- if([platform isEqualToString:@"iPad4,7"]) return@"iPad Mini 3";
- if([platform isEqualToString:@"iPad4,8"]) return@"iPad Mini 3";
- if([platform isEqualToString:@"iPad4,9"]) return@"iPad Mini 3";
- if([platform isEqualToString:@"iPad5,1"]) return@"iPad Mini 4";
- if([platform isEqualToString:@"iPad5,2"]) return@"iPad Mini 4";
- if([platform isEqualToString:@"iPad5,3"]) return@"iPad Air 2";
- if([platform isEqualToString:@"iPad5,4"]) return@"iPad Air 2";
- if([platform isEqualToString:@"iPad6,3"]) return@"iPad Pro 9.7";
- if([platform isEqualToString:@"iPad6,4"]) return@"iPad Pro 9.7";
- if([platform isEqualToString:@"iPad6,7"]) return@"iPad Pro 12.9";
- if([platform isEqualToString:@"iPad6,8"]) return@"iPad Pro 12.9";
- if([platform isEqualToString:@"i386"]) return@"iPhone Simulator";
- if([platform isEqualToString:@"x86_64"]) return@"iPhone Simulator";
- return platform;
- }
六、IP地址获取,只适用于WiFi网络需要添加以下头文件和宏定义
- #import <ifaddrs.h> //ip
- #import <arpa/inet.h>
- #import <net/if.h>
- #import <__clang_cuda_runtime_wrapper.h>
- #define IOS_CELLULAR @"pdp_ip0"
- #define IOS_WIFI @"en0"
- #define IOS_VPN @"utun0"
- #define IP_ADDR_IPv4 @"ipv4"
- #define IP_ADDR_IPv6 @"ipv6"
方法一、
- - (NSString *)deviceIPAdress {
- NSString *address = @"an error occurred when obtaining ip address";
- struct ifaddrs *interfaces = NULL;
- struct ifaddrs *temp_addr = NULL;
- int success = ;
- success = getifaddrs(&interfaces);
- if (success == ) // 0 表示获取成功
- {
- temp_addr = interfaces;
- while (temp_addr != NULL) {
- if( temp_addr->ifa_addr->sa_family == AF_INET) {
- // Check if interface is en0 which is the wifi connection on the iPhone
- if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
- // Get NSString from C String
- address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
- }
- }
- temp_addr = temp_addr->ifa_next;
- }
- }
- freeifaddrs(interfaces);
- return address;
- }
方法二、获取设备当前网络IP地址 (WiFi 手机流量通用)
- //获取IPV4地址
- + (NSString *)getDevicesIPV4Address
- {
- return [self getDevicesIPAddress:YES];
- }
- //获取IPV6地址
- + (NSString *)getDevicesIPV6Address
- {
- return [self getDevicesIPAddress:NO];
- }
- + (NSString *)getDevicesIPAddress:(BOOL)preferIPv4
- {
- NSArray *searchArray = preferIPv4 ? @[IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] : @[ IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;
- NSDictionary *addresses = [self getIPAddresses];
- __block NSString *address;
- [searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)
- {
- address = addresses[key];
- //筛选出IP地址格式
- if([self isValidatIP:address isIpV4:preferIPv4]) *stop = YES;
- } ];
- return address ? address : @"0.0.0.0";
- }
- + (BOOL)isValidatIP:(NSString *)ipAddress isIpV4:(BOOL)ipv4 {
- if (ipAddress.length == ) {
- return NO;
- }
- NSString *urlRegEx;
- if (ipv4)
- {
- urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
- "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
- "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
- "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
- }
- else
- {
- urlRegEx = @"^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$";
- }
- NSError *error;
- NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options: error:&error];
- if (regex != nil) {
- NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options: range:NSMakeRange(, [ipAddress length])];
- if (firstMatch) {
- // NSRange resultRange = [firstMatch rangeAtIndex:0];
- // NSString *result=[ipAddress substringWithRange:resultRange];
- return YES;
- }
- }
- return NO;
- }
- + (NSDictionary *)getIPAddresses
- {
- NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:];
- // retrieve the current interfaces - returns 0 on success
- struct ifaddrs *interfaces;
- if(!getifaddrs(&interfaces)) {
- // Loop through linked list of interfaces
- struct ifaddrs *interface;
- for(interface=interfaces; interface; interface=interface->ifa_next) {
- if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {
- continue; // deeply nested code harder to read
- }
- const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;
- char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];
- if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {
- NSString *name = [NSString stringWithUTF8String:interface->ifa_name];
- NSString *type;
- if(addr->sin_family == AF_INET) {
- if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {
- type = IP_ADDR_IPv4;
- }
- } else {
- const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;
- if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {
- type = IP_ADDR_IPv6;
- }
- }
- if(type) {
- NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];
- addresses[key] = [NSString stringWithUTF8String:addrBuf];
- }
- }
- }
- // Free memory
- freeifaddrs(interfaces);
- }
- return [addresses count] ? addresses : nil;
- }
还需要用到另一个辅助类IPAddressConfig
IPAddressConfig.h
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/ioctl.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #include <arpa/inet.h>
- #include <sys/sockio.h>
- #include <net/if.h>
- #include <errno.h>
- #include <net/if_dl.h>
- #include <net/ethernet.h>
- #include <ifaddrs.h>
- #include <arpa/inet.h>
- #define BUFFERSIZE 4000
- #define MAXADDRS 32
- #define min(a,b) ((a) < (b) ? (a) : (b))
- #define max(a,b) ((a) > (b) ? (a) : (b))
- @interface IPAddressConfig : NSObject
- // extern
- extern char *if_names[MAXADDRS];
- extern char *ip_names[MAXADDRS];
- extern char *hw_addrs[MAXADDRS];
- extern unsigned long ip_addrs[MAXADDRS];
- // Function prototypes
- void InitAddresses(void);
- void FreeAddresses(void);
- void GetIPAddresses(void);
- void GetHWAddresses(void);
- @end
IPAddressConfig.m
- @implementation IPAddressConfig
- char *if_names[MAXADDRS];
- char *ip_names[MAXADDRS];
- char *hw_addrs[MAXADDRS];
- unsigned long ip_addrs[MAXADDRS];
- static int nextAddr = ;
- void InitAddresses()
- {
- int i;
- for (i=; i<MAXADDRS; ++i)
- {
- if_names[i] = ip_names[i] = hw_addrs[i] = NULL;
- ip_addrs[i] = ;
- }
- }
- void FreeAddresses()
- {
- int i;
- for (i=; i<MAXADDRS; ++i)
- {
- if (if_names[i] != ) free(if_names[i]);
- if (ip_names[i] != ) free(ip_names[i]);
- if (hw_addrs[i] != ) free(hw_addrs[i]);
- ip_addrs[i] = ;
- }
- InitAddresses();
- }
- void GetIPAddresses()
- {
- int i, len, flags;
- char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ], *cptr;
- struct ifconf ifc;
- struct ifreq *ifr, ifrcopy;
- struct sockaddr_in *sin;
- char temp[];
- int sockfd;
- for (i=; i<MAXADDRS; ++i)
- {
- if_names[i] = ip_names[i] = NULL;
- ip_addrs[i] = ;
- }
- sockfd = socket(AF_INET, SOCK_DGRAM, );
- if (sockfd < )
- {
- perror("socket failed");
- return;
- }
- ifc.ifc_len = BUFFERSIZE;
- ifc.ifc_buf = buffer;
- if (ioctl(sockfd, SIOCGIFCONF, &ifc) < )
- {
- perror("ioctl error");
- return;
- }
- lastname[] = ;
- for (ptr = buffer; ptr < buffer + ifc.ifc_len; )
- {
- ifr = (struct ifreq *)ptr;
- len = max(sizeof(struct sockaddr), ifr->ifr_addr.sa_len);
- ptr += sizeof(ifr->ifr_name) + len; // for next one in buffer
- if (ifr->ifr_addr.sa_family != AF_INET)
- {
- continue; // ignore if not desired address family
- }
- if ((cptr = (char *)strchr(ifr->ifr_name, ':')) != NULL)
- {
- *cptr = ; // replace colon will null
- }
- if (strncmp(lastname, ifr->ifr_name, IFNAMSIZ) == )
- {
- continue; /* already processed this interface */
- }
- memcpy(lastname, ifr->ifr_name, IFNAMSIZ);
- ifrcopy = *ifr;
- ioctl(sockfd, SIOCGIFFLAGS, &ifrcopy);
- flags = ifrcopy.ifr_flags;
- if ((flags & IFF_UP) == )
- {
- continue; // ignore if interface not up
- }
- if_names[nextAddr] = (char *)malloc(strlen(ifr->ifr_name)+);
- if (if_names[nextAddr] == NULL)
- {
- return;
- }
- strcpy(if_names[nextAddr], ifr->ifr_name);
- sin = (struct sockaddr_in *)&ifr->ifr_addr;
- strcpy(temp, inet_ntoa(sin->sin_addr));
- ip_names[nextAddr] = (char *)malloc(strlen(temp)+);
- if (ip_names[nextAddr] == NULL)
- {
- return;
- }
- strcpy(ip_names[nextAddr], temp);
- ip_addrs[nextAddr] = sin->sin_addr.s_addr;
- ++nextAddr;
- }
- close(sockfd);
- }
- void GetHWAddresses()
- {
- struct ifconf ifc;
- struct ifreq *ifr;
- int i, sockfd;
- char buffer[BUFFERSIZE], *cp, *cplim;
- char temp[];
- for (i=; i<MAXADDRS; ++i)
- {
- hw_addrs[i] = NULL;
- }
- sockfd = socket(AF_INET, SOCK_DGRAM, );
- if (sockfd < )
- {
- perror("socket failed");
- return;
- }
- ifc.ifc_len = BUFFERSIZE;
- ifc.ifc_buf = buffer;
- if (ioctl(sockfd, SIOCGIFCONF, (char *)&ifc) < )
- {
- perror("ioctl error");
- close(sockfd);
- return;
- }
- ifr = ifc.ifc_req;
- cplim = buffer + ifc.ifc_len;
- for (cp=buffer; cp < cplim; )
- {
- ifr = (struct ifreq *)cp;
- if (ifr->ifr_addr.sa_family == AF_LINK)
- {
- struct sockaddr_dl *sdl = (struct sockaddr_dl *)&ifr->ifr_addr;
- int a,b,c,d,e,f;
- int i;
- strcpy(temp, (char *)ether_ntoa((const struct ether_addr *)LLADDR(sdl)));
- sscanf(temp, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f);
- sprintf(temp, "%02X:%02X:%02X:%02X:%02X:%02X",a,b,c,d,e,f);
- for (i=; i<MAXADDRS; ++i)
- {
- if ((if_names[i] != NULL) && (strcmp(ifr->ifr_name, if_names[i]) == ))
- {
- if (hw_addrs[i] == NULL)
- {
- hw_addrs[i] = (char *)malloc(strlen(temp)+);
- strcpy(hw_addrs[i], temp);
- break;
- }
- }
- }
- }
- cp += sizeof(ifr->ifr_name) + max(sizeof(ifr->ifr_addr), ifr->ifr_addr.sa_len);
- }
- close(sockfd);
- }
- @end
七、获取手机当前连接的WiFi名称
- - (NSString *)getWifiName
- {
- NSString *wifiName = nil;
- CFArrayRef wifiInterfaces = CNCopySupportedInterfaces();
- if (!wifiInterfaces) {
- return nil;
- }
- NSArray *interfaces = (__bridge NSArray *)wifiInterfaces;
- for (NSString *interfaceName in interfaces) {
- CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName));
- if (dictRef) {
- NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef;
- wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID];
- CFRelease(dictRef);
- }
- }
- CFRelease(wifiInterfaces);
- return wifiName;
- }
iOS常用系统信息获取方法的更多相关文章
- iOS常用的封装方法
做开发也有一段时间了,看了好多大神的代码,总体感觉他们写的代码简洁,好看,然而在对比下我写的代码,混乱,无序,简直不堪入目啊! 总体来说大神们的代码封装的都比较好,对一个项目要重复用到的代码他们都会封 ...
- 获取ios设备系统信息的方法 之 [UIDevice currentDevice]
获取iphone的系统信息使用[UIDevice currentDevice],信息如下: [[UIDevice currentDevice] systemName]:系统名称,如iPhone OS ...
- apicloud编译所需的ios证书的获取方法
在我们通过apicloud或hbuilderX这些工具打包ios应用的时候,需要一个ios证书. 那么我们如何生成这个ios证书呢?网上介绍的方法都是需要使用mac电脑,然后用mac电脑的钥匙串访问的 ...
- apicloud打包的ios证书的获取方法
apicloud云编译的时候,需要测试证书或者正式证书进行编译. 那么这个证书是怎么来的呢?通过什么渠道可以获取呢? 这里我介绍下使用香蕉云编这个在线工具来生成: 1.登录香蕉云编,生成证书的csr文 ...
- 什么是DMI,SMBIOS,符合SMBIOS规范的计算机的系统信息获取方法
转自:http://www.cnblogs.com/gunl/archive/2011/08/08/2130719.html DMI是英文单词Desktop Management Interface的 ...
- iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)
1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下 ...
- 【python自动化】python 常用时间获取方法
代码如下: import datetime import time DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" DATE_FORMAT = &quo ...
- iOS常用公共方法
iOS常用公共方法 字数2917 阅读3070 评论45 喜欢236 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat si ...
- iOS 常用公共方法
iOS常用公共方法 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat size = 0.0; NSError *error; N ...
随机推荐
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- 架构师养成记--8.Queue
一.ConcurrentLinkedQueue 是一个适合在高并发场景下,无锁,无界的,先进先出原则.不允许为null值,add().offer()加入元素,这两个方法没区别:pull().peek( ...
- html页面制作css基本设置
html{ height: 100%;} *{ margin: 0; padding: 0;}/* tell the browser to render HTML 5 elements as bloc ...
- Linux学习之CentOS(二十)--CentOS6.4下修改MySQL编码方法
但是当我们在试图对数据库中的数据进行备份或者将sql文件导入到我们的数据库时可能就会碰到编码的问题,在windows下安装mysql时我们可以在安装的时候就选择好整个数据库的编码方式(通常设置成utf ...
- Xcode6新特性(1)-删除Main.storyboard
当新建完一个空项目的时候,Xcode会自动创建一个Main.storyboard的空文件,如果不需要,可以将其删除.但是如果删除,再次运行程序,程序会报错,提示找不到Main.storyboard文件 ...
- 决策树及R语言实现
决策树是什么 决策树是基于树结构来进行决策,这恰是人类在面临决策问题时一种很自然的处理机制.例如,我们要对"这是好瓜吗?"这样的问题进行决策时,通常会进行一系列的判断或" ...
- 用C#创建Windows服务(Windows Services)
用C#创建Windows服务(Windows Services) 学习: 第一步:创建服务框架 创建一个新的 Windows 服务项目,可以从Visual C# 工程中选取 Windows 服务(W ...
- x:Array的使用
x:Array是通过Items属性向使用者暴露一个类型已知的ArrayList.ArrayList中成员类型由x:Array type指明 <Window x:Class="demo_ ...
- 忘记mysql root 密码修改小技巧
首先我说一下我的情况,我并不是忘记了我的root密码,只不过是我在使用phpmyadmin的时候更改密码的时候选择了如图1 的这个方法将密码加密并更改了,然后就再次登录的时候登录不上,所以对于菜鸟级的 ...
- Azure底层架构的初步分析
之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...