一、手机电量获取,方法二需要导入头文件#import<objc/runtime.h>

方法一、获取电池电量(一般用百分数表示,大家自行处理就好)

  1. -(CGFloat)getBatteryQuantity
  2. {
  3. return [[UIDevice currentDevice] batteryLevel];
  4. }

方法二、

  1. - (int)getCurrentBatteryLevel
  2. {
  3. UIApplication *app = [UIApplication sharedApplication];
  4. if (app.applicationState == UIApplicationStateActive||
  5. app.applicationState==UIApplicationStateInactive)
  6. {
  7. Ivar ivar= class_getInstanceVariable([app class],"_statusBar");
  8. id status = object_getIvar(app, ivar);
  9. for (id aview in [status subviews])
  10. {
  11. int batteryLevel = ;
  12. for (id bview in [aview subviews])
  13. {
  14. if ([NSStringFromClass([bview class]) caseInsensitiveCompare:@"UIStatusBarBatteryItemView"]
  15. == NSOrderedSame&&[[[UIDevice currentDevice] systemVersion] floatValue] >=6.0)
  16. {
  17.  
  18. Ivar ivar = class_getInstanceVariable([bview class],"_capacity");
  19. if(ivar)
  20. {
  21. batteryLevel = ((int (*)(id, Ivar))object_getIvar)(bview, ivar);
  22. //这种方式也可以
  23. /*ptrdiff_t offset = ivar_getOffset(ivar);
  24. unsigned char *stuffBytes = (unsigned char *)(__bridge void *)bview;
  25. batteryLevel = * ((int *)(stuffBytes + offset));*/
  26. if (batteryLevel > && batteryLevel <= ){
  27. return batteryLevel;
  28. }
  29. else{
  30. return ;
  31. }
  32. }
  33. }
  34. }
  35. }
  36. }
  37. return ;
  38. }

二、获取手机电池状态(UIDeviceBatteryState为枚举类型)

  1. // UIDeviceBatteryStateUnknown:无法取得充电状态情况
  2. // UIDeviceBatteryStateUnplugged:非充电状态
  3. // UIDeviceBatteryStateCharging:充电状态
  4. // UIDeviceBatteryStateFull:充满状态(连接充电器充满状态)
  5.  
  6. -(UIDeviceBatteryState)getBatteryStauts
  7. {
  8. UIDevice *device = [UIDevice currentDevice];
  9. device.batteryMonitoringEnabled = YES;
  10. return device.batteryState;
  11. }

三、获取手机总运行内存大小

  1. //3.获取总内存大小
  2. -(NSString *)getTotalMemorySize
  3. {
  4. return [self fileSizeToString:[NSProcessInfo processInfo].physicalMemory];
  5. }
  6.  
  7. -(NSString *)fileSizeToString:(unsigned long long)fileSize
  8. {
  9. NSInteger KB = ;
  10. NSInteger MB = KB*KB;
  11. NSInteger GB = MB*KB;
  12.  
  13. if (fileSize < ) {
  14. return @"0 B";
  15. }else if (fileSize < KB) {
  16. return @"< 1 KB";
  17. }else if (fileSize < MB) {
  18. return [NSString stringWithFormat:@"%.1f KB",((CGFloat)fileSize)/KB];
  19. }else if (fileSize < GB) {
  20. return [NSString stringWithFormat:@"%.1f MB",((CGFloat)fileSize)/MB];
  21. }else {
  22. return [NSString stringWithFormat:@"%.1f GB",((CGFloat)fileSize)/GB];
  23. }
  24. }

四、获取当前剩余内存和已用内存,需要添加头文件#import <sys/sysctl.h>  和#import <mach/mach.h>

  1. // 获取当前设备可用内存(单位:MB)
  2. - (double)availableMemory
  3. {
  4. vm_statistics_data_t vmStats;
  5. mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;
  6. kern_return_t kernReturn = host_statistics(mach_host_self(),
  7. HOST_VM_INFO,
  8. (host_info_t)&vmStats,
  9. &infoCount);
  10.  
  11. if (kernReturn != KERN_SUCCESS) {
  12. return NSNotFound;
  13. }
  14.  
  15. return ((vm_page_size *vmStats.free_count) / 1024.0) / 1024.0;
  16. }
  17.  
  18. // 获取当前任务所占用的内存(单位:MB)
  19. - (double)usedMemory
  20. {
  21. task_basic_info_data_t taskInfo;
  22. mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;
  23. kern_return_t kernReturn = task_info(mach_task_self(),
  24. TASK_BASIC_INFO,
  25. (task_info_t)&taskInfo,
  26. &infoCount);
  27.  
  28. if (kernReturn != KERN_SUCCESS
  29. ) {
  30. return NSNotFound;
  31. }
  32.  
  33. return taskInfo.resident_size / 1024.0 / 1024.0;
  34. }

五、获取手机型号,需要添加头文件#import<sys/utsname.h>

  1. + (NSString *)getCurrentiPhoneType
  2. {
  3. struct utsname systemInfo;
  4. uname(&systemInfo);
  5. NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
  6.  
  7. if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
  8.  
  9. if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
  10.  
  11. if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
  12.  
  13. if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
  14.  
  15. if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
  16.  
  17. if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
  18.  
  19. if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
  20.  
  21. if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
  22.  
  23. if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
  24.  
  25. if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
  26.  
  27. if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
  28.  
  29. if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
  30.  
  31. if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
  32.  
  33. if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
  34.  
  35. if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
  36.  
  37. if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
  38.  
  39. if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
  40.  
  41. if([platform isEqualToString:@"iPhone8,4"]) return@"iPhone SE";
  42.  
  43. if([platform isEqualToString:@"iPhone9,1"]) return@"iPhone 7";
  44.  
  45. if([platform isEqualToString:@"iPhone9,2"]) return@"iPhone 7 Plus";
  46.  
  47. if([platform isEqualToString:@"iPhone10,1"]) return@"iPhone 8";
  48.  
  49. if([platform isEqualToString:@"iPhone10,4"]) return@"iPhone 8";
  50.  
  51. if([platform isEqualToString:@"iPhone10,2"]) return@"iPhone 8 Plus";
  52.  
  53. if([platform isEqualToString:@"iPhone10,5"]) return@"iPhone 8 Plus";
  54.  
  55. if([platform isEqualToString:@"iPhone10,3"]) return@"iPhone X";
  56.  
  57. if([platform isEqualToString:@"iPhone10,6"]) return@"iPhone X";
  58.  
  59. if([platform isEqualToString:@"iPod1,1"]) return@"iPod Touch 1G";
  60.  
  61. if([platform isEqualToString:@"iPod2,1"]) return@"iPod Touch 2G";
  62.  
  63. if([platform isEqualToString:@"iPod3,1"]) return@"iPod Touch 3G";
  64.  
  65. if([platform isEqualToString:@"iPod4,1"]) return@"iPod Touch 4G";
  66.  
  67. if([platform isEqualToString:@"iPod5,1"]) return@"iPod Touch 5G";
  68.  
  69. if([platform isEqualToString:@"iPad1,1"]) return@"iPad 1G";
  70.  
  71. if([platform isEqualToString:@"iPad2,1"]) return@"iPad 2";
  72.  
  73. if([platform isEqualToString:@"iPad2,2"]) return@"iPad 2";
  74.  
  75. if([platform isEqualToString:@"iPad2,3"]) return@"iPad 2";
  76.  
  77. if([platform isEqualToString:@"iPad2,4"]) return@"iPad 2";
  78.  
  79. if([platform isEqualToString:@"iPad2,5"]) return@"iPad Mini 1G";
  80.  
  81. if([platform isEqualToString:@"iPad2,6"]) return@"iPad Mini 1G";
  82.  
  83. if([platform isEqualToString:@"iPad2,7"]) return@"iPad Mini 1G";
  84.  
  85. if([platform isEqualToString:@"iPad3,1"]) return@"iPad 3";
  86.  
  87. if([platform isEqualToString:@"iPad3,2"]) return@"iPad 3";
  88.  
  89. if([platform isEqualToString:@"iPad3,3"]) return@"iPad 3";
  90.  
  91. if([platform isEqualToString:@"iPad3,4"]) return@"iPad 4";
  92.  
  93. if([platform isEqualToString:@"iPad3,5"]) return@"iPad 4";
  94.  
  95. if([platform isEqualToString:@"iPad3,6"]) return@"iPad 4";
  96.  
  97. if([platform isEqualToString:@"iPad4,1"]) return@"iPad Air";
  98.  
  99. if([platform isEqualToString:@"iPad4,2"]) return@"iPad Air";
  100.  
  101. if([platform isEqualToString:@"iPad4,3"]) return@"iPad Air";
  102.  
  103. if([platform isEqualToString:@"iPad4,4"]) return@"iPad Mini 2G";
  104.  
  105. if([platform isEqualToString:@"iPad4,5"]) return@"iPad Mini 2G";
  106.  
  107. if([platform isEqualToString:@"iPad4,6"]) return@"iPad Mini 2G";
  108.  
  109. if([platform isEqualToString:@"iPad4,7"]) return@"iPad Mini 3";
  110.  
  111. if([platform isEqualToString:@"iPad4,8"]) return@"iPad Mini 3";
  112.  
  113. if([platform isEqualToString:@"iPad4,9"]) return@"iPad Mini 3";
  114.  
  115. if([platform isEqualToString:@"iPad5,1"]) return@"iPad Mini 4";
  116.  
  117. if([platform isEqualToString:@"iPad5,2"]) return@"iPad Mini 4";
  118.  
  119. if([platform isEqualToString:@"iPad5,3"]) return@"iPad Air 2";
  120.  
  121. if([platform isEqualToString:@"iPad5,4"]) return@"iPad Air 2";
  122.  
  123. if([platform isEqualToString:@"iPad6,3"]) return@"iPad Pro 9.7";
  124.  
  125. if([platform isEqualToString:@"iPad6,4"]) return@"iPad Pro 9.7";
  126.  
  127. if([platform isEqualToString:@"iPad6,7"]) return@"iPad Pro 12.9";
  128.  
  129. if([platform isEqualToString:@"iPad6,8"]) return@"iPad Pro 12.9";
  130.  
  131. if([platform isEqualToString:@"i386"]) return@"iPhone Simulator";
  132.  
  133. if([platform isEqualToString:@"x86_64"]) return@"iPhone Simulator";
  134.  
  135. return platform;
  136. }

六、IP地址获取,只适用于WiFi网络需要添加以下头文件和宏定义

  1. #import <ifaddrs.h> //ip
  2. #import <arpa/inet.h>
  3. #import <net/if.h>
  4. #import <__clang_cuda_runtime_wrapper.h>
  5.  
  6. #define IOS_CELLULAR @"pdp_ip0"
  7. #define IOS_WIFI @"en0"
  8. #define IOS_VPN @"utun0"
  9. #define IP_ADDR_IPv4 @"ipv4"
  10. #define IP_ADDR_IPv6 @"ipv6"

方法一、

  1. - (NSString *)deviceIPAdress {
  2. NSString *address = @"an error occurred when obtaining ip address";
  3. struct ifaddrs *interfaces = NULL;
  4. struct ifaddrs *temp_addr = NULL;
  5. int success = ;
  6.  
  7. success = getifaddrs(&interfaces);
  8. if (success == ) // 0 表示获取成功
  9. {
  10. temp_addr = interfaces;
  11. while (temp_addr != NULL) {
  12. if( temp_addr->ifa_addr->sa_family == AF_INET) {
  13. // Check if interface is en0 which is the wifi connection on the iPhone
  14. if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
  15. // Get NSString from C String
  16. address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
  17. }
  18. }
  19.  
  20. temp_addr = temp_addr->ifa_next;
  21. }
  22. }
  23. freeifaddrs(interfaces);
  24. return address;
  25. }

方法二、获取设备当前网络IP地址 (WiFi 手机流量通用)

  1. //获取IPV4地址
  2. + (NSString *)getDevicesIPV4Address
  3. {
  4. return [self getDevicesIPAddress:YES];
  5. }
  6.  
  7. //获取IPV6地址
  8. + (NSString *)getDevicesIPV6Address
  9. {
  10. return [self getDevicesIPAddress:NO];
  11. }
  1. + (NSString *)getDevicesIPAddress:(BOOL)preferIPv4
  2. {
  3. 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 ] ;
  4. NSDictionary *addresses = [self getIPAddresses];
  5. __block NSString *address;
  6. [searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)
  7. {
  8. address = addresses[key];
  9. //筛选出IP地址格式
  10. if([self isValidatIP:address isIpV4:preferIPv4]) *stop = YES;
  11. } ];
  12. return address ? address : @"0.0.0.0";
  13. }
  14.  
  15. + (BOOL)isValidatIP:(NSString *)ipAddress isIpV4:(BOOL)ipv4 {
  16. if (ipAddress.length == ) {
  17. return NO;
  18. }
  19. NSString *urlRegEx;
  20. if (ipv4)
  21. {
  22. urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
  23. "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
  24. "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
  25. "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
  26. }
  27. else
  28. {
  29. 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*$";
  30. }
  31.  
  32. NSError *error;
  33. NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options: error:&error];
  34.  
  35. if (regex != nil) {
  36. NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options: range:NSMakeRange(, [ipAddress length])];
  37. if (firstMatch) {
  38. // NSRange resultRange = [firstMatch rangeAtIndex:0];
  39. // NSString *result=[ipAddress substringWithRange:resultRange];
  40. return YES;
  41. }
  42. }
  43. return NO;
  44. }
  45.  
  46. + (NSDictionary *)getIPAddresses
  47. {
  48. NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:];
  49.  
  50. // retrieve the current interfaces - returns 0 on success
  51. struct ifaddrs *interfaces;
  52. if(!getifaddrs(&interfaces)) {
  53. // Loop through linked list of interfaces
  54. struct ifaddrs *interface;
  55. for(interface=interfaces; interface; interface=interface->ifa_next) {
  56. if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {
  57. continue; // deeply nested code harder to read
  58. }
  59. const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;
  60. char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];
  61. if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {
  62. NSString *name = [NSString stringWithUTF8String:interface->ifa_name];
  63. NSString *type;
  64. if(addr->sin_family == AF_INET) {
  65. if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {
  66. type = IP_ADDR_IPv4;
  67. }
  68. } else {
  69. const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;
  70. if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {
  71. type = IP_ADDR_IPv6;
  72. }
  73. }
  74. if(type) {
  75. NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];
  76. addresses[key] = [NSString stringWithUTF8String:addrBuf];
  77. }
  78. }
  79. }
  80. // Free memory
  81. freeifaddrs(interfaces);
  82. }
  83. return [addresses count] ? addresses : nil;
  84. }

还需要用到另一个辅助类IPAddressConfig

IPAddressConfig.h

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <sys/ioctl.h>
  6. #include <sys/types.h>
  7. #include <sys/socket.h>
  8. #include <netinet/in.h>
  9. #include <netdb.h>
  10. #include <arpa/inet.h>
  11. #include <sys/sockio.h>
  12. #include <net/if.h>
  13. #include <errno.h>
  14. #include <net/if_dl.h>
  15. #include <net/ethernet.h>
  16. #include <ifaddrs.h>
  17. #include <arpa/inet.h>
  18.  
  19. #define BUFFERSIZE 4000
  20. #define MAXADDRS 32
  21. #define min(a,b) ((a) < (b) ? (a) : (b))
  22. #define max(a,b) ((a) > (b) ? (a) : (b))
  23.  
  24. @interface IPAddressConfig : NSObject
  25.  
  26. // extern
  27. extern char *if_names[MAXADDRS];
  28. extern char *ip_names[MAXADDRS];
  29. extern char *hw_addrs[MAXADDRS];
  30. extern unsigned long ip_addrs[MAXADDRS];
  31.  
  32. // Function prototypes
  33. void InitAddresses(void);
  34. void FreeAddresses(void);
  35. void GetIPAddresses(void);
  36. void GetHWAddresses(void);
  37.  
  38. @end

IPAddressConfig.m

  1. @implementation IPAddressConfig
  2.  
  3. char *if_names[MAXADDRS];
  4. char *ip_names[MAXADDRS];
  5. char *hw_addrs[MAXADDRS];
  6. unsigned long ip_addrs[MAXADDRS];
  7.  
  8. static int nextAddr = ;
  9.  
  10. void InitAddresses()
  11. {
  12. int i;
  13. for (i=; i<MAXADDRS; ++i)
  14. {
  15. if_names[i] = ip_names[i] = hw_addrs[i] = NULL;
  16. ip_addrs[i] = ;
  17. }
  18. }
  19.  
  20. void FreeAddresses()
  21. {
  22. int i;
  23. for (i=; i<MAXADDRS; ++i)
  24. {
  25. if (if_names[i] != ) free(if_names[i]);
  26. if (ip_names[i] != ) free(ip_names[i]);
  27. if (hw_addrs[i] != ) free(hw_addrs[i]);
  28. ip_addrs[i] = ;
  29. }
  30. InitAddresses();
  31. }
  32.  
  33. void GetIPAddresses()
  34. {
  35. int i, len, flags;
  36. char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ], *cptr;
  37. struct ifconf ifc;
  38. struct ifreq *ifr, ifrcopy;
  39. struct sockaddr_in *sin;
  40.  
  41. char temp[];
  42.  
  43. int sockfd;
  44.  
  45. for (i=; i<MAXADDRS; ++i)
  46. {
  47. if_names[i] = ip_names[i] = NULL;
  48. ip_addrs[i] = ;
  49. }
  50.  
  51. sockfd = socket(AF_INET, SOCK_DGRAM, );
  52. if (sockfd < )
  53. {
  54. perror("socket failed");
  55. return;
  56. }
  57.  
  58. ifc.ifc_len = BUFFERSIZE;
  59. ifc.ifc_buf = buffer;
  60.  
  61. if (ioctl(sockfd, SIOCGIFCONF, &ifc) < )
  62. {
  63. perror("ioctl error");
  64. return;
  65. }
  66.  
  67. lastname[] = ;
  68.  
  69. for (ptr = buffer; ptr < buffer + ifc.ifc_len; )
  70. {
  71. ifr = (struct ifreq *)ptr;
  72. len = max(sizeof(struct sockaddr), ifr->ifr_addr.sa_len);
  73. ptr += sizeof(ifr->ifr_name) + len; // for next one in buffer
  74.  
  75. if (ifr->ifr_addr.sa_family != AF_INET)
  76. {
  77. continue; // ignore if not desired address family
  78. }
  79.  
  80. if ((cptr = (char *)strchr(ifr->ifr_name, ':')) != NULL)
  81. {
  82. *cptr = ; // replace colon will null
  83. }
  84.  
  85. if (strncmp(lastname, ifr->ifr_name, IFNAMSIZ) == )
  86. {
  87. continue; /* already processed this interface */
  88. }
  89.  
  90. memcpy(lastname, ifr->ifr_name, IFNAMSIZ);
  91.  
  92. ifrcopy = *ifr;
  93. ioctl(sockfd, SIOCGIFFLAGS, &ifrcopy);
  94. flags = ifrcopy.ifr_flags;
  95. if ((flags & IFF_UP) == )
  96. {
  97. continue; // ignore if interface not up
  98. }
  99.  
  100. if_names[nextAddr] = (char *)malloc(strlen(ifr->ifr_name)+);
  101. if (if_names[nextAddr] == NULL)
  102. {
  103. return;
  104. }
  105. strcpy(if_names[nextAddr], ifr->ifr_name);
  106.  
  107. sin = (struct sockaddr_in *)&ifr->ifr_addr;
  108. strcpy(temp, inet_ntoa(sin->sin_addr));
  109.  
  110. ip_names[nextAddr] = (char *)malloc(strlen(temp)+);
  111. if (ip_names[nextAddr] == NULL)
  112. {
  113. return;
  114. }
  115. strcpy(ip_names[nextAddr], temp);
  116.  
  117. ip_addrs[nextAddr] = sin->sin_addr.s_addr;
  118.  
  119. ++nextAddr;
  120. }
  121.  
  122. close(sockfd);
  123. }
  124.  
  125. void GetHWAddresses()
  126. {
  127. struct ifconf ifc;
  128. struct ifreq *ifr;
  129. int i, sockfd;
  130. char buffer[BUFFERSIZE], *cp, *cplim;
  131. char temp[];
  132.  
  133. for (i=; i<MAXADDRS; ++i)
  134. {
  135. hw_addrs[i] = NULL;
  136. }
  137.  
  138. sockfd = socket(AF_INET, SOCK_DGRAM, );
  139. if (sockfd < )
  140. {
  141. perror("socket failed");
  142. return;
  143. }
  144.  
  145. ifc.ifc_len = BUFFERSIZE;
  146. ifc.ifc_buf = buffer;
  147.  
  148. if (ioctl(sockfd, SIOCGIFCONF, (char *)&ifc) < )
  149. {
  150. perror("ioctl error");
  151. close(sockfd);
  152. return;
  153. }
  154.  
  155. ifr = ifc.ifc_req;
  156.  
  157. cplim = buffer + ifc.ifc_len;
  158.  
  159. for (cp=buffer; cp < cplim; )
  160. {
  161. ifr = (struct ifreq *)cp;
  162. if (ifr->ifr_addr.sa_family == AF_LINK)
  163. {
  164. struct sockaddr_dl *sdl = (struct sockaddr_dl *)&ifr->ifr_addr;
  165. int a,b,c,d,e,f;
  166. int i;
  167.  
  168. strcpy(temp, (char *)ether_ntoa((const struct ether_addr *)LLADDR(sdl)));
  169. sscanf(temp, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f);
  170. sprintf(temp, "%02X:%02X:%02X:%02X:%02X:%02X",a,b,c,d,e,f);
  171.  
  172. for (i=; i<MAXADDRS; ++i)
  173. {
  174. if ((if_names[i] != NULL) && (strcmp(ifr->ifr_name, if_names[i]) == ))
  175. {
  176. if (hw_addrs[i] == NULL)
  177. {
  178. hw_addrs[i] = (char *)malloc(strlen(temp)+);
  179. strcpy(hw_addrs[i], temp);
  180. break;
  181. }
  182. }
  183. }
  184. }
  185. cp += sizeof(ifr->ifr_name) + max(sizeof(ifr->ifr_addr), ifr->ifr_addr.sa_len);
  186. }
  187. close(sockfd);
  188. }
  189.  
  190. @end

七、获取手机当前连接的WiFi名称

  1. - (NSString *)getWifiName
  2. {
  3. NSString *wifiName = nil;
  4.  
  5. CFArrayRef wifiInterfaces = CNCopySupportedInterfaces();
  6. if (!wifiInterfaces) {
  7. return nil;
  8. }
  9.  
  10. NSArray *interfaces = (__bridge NSArray *)wifiInterfaces;
  11.  
  12. for (NSString *interfaceName in interfaces) {
  13. CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName));
  14.  
  15. if (dictRef) {
  16. NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef;
  17.  
  18. wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID];
  19.  
  20. CFRelease(dictRef);
  21. }
  22. }
  23.  
  24. CFRelease(wifiInterfaces);
  25. return wifiName;
  26. }






iOS常用系统信息获取方法的更多相关文章

  1. iOS常用的封装方法

    做开发也有一段时间了,看了好多大神的代码,总体感觉他们写的代码简洁,好看,然而在对比下我写的代码,混乱,无序,简直不堪入目啊! 总体来说大神们的代码封装的都比较好,对一个项目要重复用到的代码他们都会封 ...

  2. 获取ios设备系统信息的方法 之 [UIDevice currentDevice]

    获取iphone的系统信息使用[UIDevice currentDevice],信息如下: [[UIDevice currentDevice] systemName]:系统名称,如iPhone OS ...

  3. apicloud编译所需的ios证书的获取方法

    在我们通过apicloud或hbuilderX这些工具打包ios应用的时候,需要一个ios证书. 那么我们如何生成这个ios证书呢?网上介绍的方法都是需要使用mac电脑,然后用mac电脑的钥匙串访问的 ...

  4. apicloud打包的ios证书的获取方法

    apicloud云编译的时候,需要测试证书或者正式证书进行编译. 那么这个证书是怎么来的呢?通过什么渠道可以获取呢? 这里我介绍下使用香蕉云编这个在线工具来生成: 1.登录香蕉云编,生成证书的csr文 ...

  5. 什么是DMI,SMBIOS,符合SMBIOS规范的计算机的系统信息获取方法

    转自:http://www.cnblogs.com/gunl/archive/2011/08/08/2130719.html DMI是英文单词Desktop Management Interface的 ...

  6. iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

    1. 简单工厂模式 如何理解简单工厂,工厂方法, 抽象工厂三种设计模式? 简单工厂方法包含:父类拥有共同基础接口,具体子类实现子类特殊功能,工厂类根据参数区分创建不同子类实例.该场景对应的UML图如下 ...

  7. 【python自动化】python 常用时间获取方法

    代码如下: import datetime import time DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" DATE_FORMAT = &quo ...

  8. iOS常用公共方法

      iOS常用公共方法 字数2917 阅读3070 评论45 喜欢236 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat si ...

  9. iOS 常用公共方法

    iOS常用公共方法 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat size = 0.0; NSError *error; N ...

随机推荐

  1. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

  2. 架构师养成记--8.Queue

    一.ConcurrentLinkedQueue 是一个适合在高并发场景下,无锁,无界的,先进先出原则.不允许为null值,add().offer()加入元素,这两个方法没区别:pull().peek( ...

  3. html页面制作css基本设置

    html{ height: 100%;} *{ margin: 0; padding: 0;}/* tell the browser to render HTML 5 elements as bloc ...

  4. Linux学习之CentOS(二十)--CentOS6.4下修改MySQL编码方法

    但是当我们在试图对数据库中的数据进行备份或者将sql文件导入到我们的数据库时可能就会碰到编码的问题,在windows下安装mysql时我们可以在安装的时候就选择好整个数据库的编码方式(通常设置成utf ...

  5. Xcode6新特性(1)-删除Main.storyboard

    当新建完一个空项目的时候,Xcode会自动创建一个Main.storyboard的空文件,如果不需要,可以将其删除.但是如果删除,再次运行程序,程序会报错,提示找不到Main.storyboard文件 ...

  6. 决策树及R语言实现

    决策树是什么 决策树是基于树结构来进行决策,这恰是人类在面临决策问题时一种很自然的处理机制.例如,我们要对"这是好瓜吗?"这样的问题进行决策时,通常会进行一系列的判断或" ...

  7. 用C#创建Windows服务(Windows Services)

    用C#创建Windows服务(Windows Services) 学习:  第一步:创建服务框架 创建一个新的 Windows 服务项目,可以从Visual C# 工程中选取 Windows 服务(W ...

  8. x:Array的使用

    x:Array是通过Items属性向使用者暴露一个类型已知的ArrayList.ArrayList中成员类型由x:Array type指明 <Window x:Class="demo_ ...

  9. 忘记mysql root 密码修改小技巧

    首先我说一下我的情况,我并不是忘记了我的root密码,只不过是我在使用phpmyadmin的时候更改密码的时候选择了如图1 的这个方法将密码加密并更改了,然后就再次登录的时候登录不上,所以对于菜鸟级的 ...

  10. Azure底层架构的初步分析

    之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...