IOS源码开发获取当前的流量信息
来源:互联网 发布:美团大数据平台 编辑:程序博客网 时间:2024/05/03 10:07
通过读取系统网络接口信息,获取当前iphone设备的流量相关信息,统计的是上次开机至今的流量信息. 2
倒入库:
SystemConfiguration.framework
加入头文件:
#include <ifaddrs.h>#include <sys/socket.h>#include <net/if.h>
流量统计功能
-(NSString *)bytesToAvaiUnit:(int)bytes{if(bytes < 1024)// B{return [NSString stringWithFormat:@"%dB", bytes];}else if(bytes >= 1024 && bytes < 1024 * 1024)// KB{return [NSString stringWithFormat:@"%.1fKB", (double)bytes / 1024];}else if(bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024)// MB{return [NSString stringWithFormat:@"%.2fMB", (double)bytes / (1024 * 1024)];}else// GB{return [NSString stringWithFormat:@"%.3fGB", (double)bytes / (1024 * 1024 * 1024)];}}-(void)checkNetworkflow{ struct ifaddrs *ifa_list = 0, *ifa; if (getifaddrs(&ifa_list) == -1) { return; } uint32_t iBytes = 0; uint32_t oBytes = 0; uint32_t allFlow = 0; uint32_t wifiIBytes = 0; uint32_t wifiOBytes = 0; uint32_t wifiFlow = 0; uint32_t wwanIBytes = 0; uint32_t wwanOBytes = 0; uint32_t wwanFlow = 0; struct timeval time ; for (ifa = ifa_list; ifa; ifa = ifa->ifa_next) { if (AF_LINK != ifa->ifa_addr->sa_family) continue; if (!(ifa->ifa_flags & IFF_UP) && !(ifa->ifa_flags & IFF_RUNNING)) continue; if (ifa->ifa_data == 0) continue; // Not a loopback device. // network flow if (strncmp(ifa->ifa_name, "lo", 2)) { struct if_data *if_data = (struct if_data *)ifa->ifa_data; iBytes += if_data->ifi_ibytes; oBytes += if_data->ifi_obytes; allFlow = iBytes + oBytes; time = if_data->ifi_lastchange; // NSLog(@"1111===%s :iBytes is %d, oBytes is %d", ifa->ifa_name, iBytes, oBytes); } //WIFI流量统计功能 if (!strcmp(ifa->ifa_name, "en0")) { struct if_data *if_data = (struct if_data *)ifa->ifa_data; wifiIBytes += if_data->ifi_ibytes; wifiOBytes += if_data->ifi_obytes; wifiFlow = wifiIBytes + wifiOBytes; } //3G和GPRS流量统计 if (!strcmp(ifa->ifa_name, "pdp_ip0")) { struct if_data *if_data = (struct if_data *)ifa->ifa_data; wwanIBytes += if_data->ifi_ibytes; wwanOBytes += if_data->ifi_obytes; wwanFlow = wwanIBytes + wwanOBytes; //NSLog(@"111122===%s :iBytes is %d, oBytes is %d", ifa->ifa_name, iBytes, oBytes); } } freeifaddrs(ifa_list); NSString *changeTime=[NSString stringWithFormat:@"%s",ctime(&time)]; NSLog(@"changeTime==%@",changeTime); NSString *receivedBytes= [self bytesToAvaiUnit:iBytes]; NSLog(@"receivedBytes==%@",receivedBytes); NSString *sentBytes = [self bytesToAvaiUnit:oBytes]; NSLog(@"sentBytes==%@",sentBytes); NSString *networkFlow = [self bytesToAvaiUnit:allFlow]; NSLog(@"networkFlow==%@",networkFlow); NSString *wifiReceived = [self bytesToAvaiUnit:wifiIBytes]; NSLog(@"wifiReceived==%@",wifiReceived); NSString *wifiSent = [self bytesToAvaiUnit: wifiOBytes]; NSLog(@"wifiSent==%@",wifiSent); NSString *wifiBytes = [self bytesToAvaiUnit:wifiFlow]; NSLog(@"wifiBytes==%@",wifiBytes); NSString *wwanReceived = [self bytesToAvaiUnit:wwanIBytes]; NSLog(@"wwanReceived==%@",wwanReceived); NSString *wwanSent = [self bytesToAvaiUnit:wwanOBytes]; NSLog(@"wwanSent==%@",wwanSent); NSString *wwanBytes = [self bytesToAvaiUnit:wwanFlow]; NSLog(@"wwanBytes==%@",wwanBytes);}
主要方法就是上面的,然后在你想要知道的结果的地方调用就ok了。
[self checkNetworkflow];
结果:
2013-03-30 23:45:33.565 Reachability[2993:707] changeTime==Sat Mar 30 09:52:09 20132013-03-30 23:45:33.567 Reachability[2993:707] receivedBytes==62.73MB2013-03-30 23:45:33.569 Reachability[2993:707] sentBytes==8.22MB2013-03-30 23:45:33.571 Reachability[2993:707] networkFlow==70.94MB2013-03-30 23:45:33.573 Reachability[2993:707] wifiReceived==55.40MB2013-03-30 23:45:33.575 Reachability[2993:707] wifiSent==5.41MB2013-03-30 23:45:33.577 Reachability[2993:707] wifiBytes==60.81MB2013-03-30 23:45:33.579 Reachability[2993:707] wwanReceived==7.33MB2013-03-30 23:45:33.581 Reachability[2993:707] wwanSent==2.81MB2013-03-30 23:45:33.583 Reachability[2993:707] wwanBytes==10.14MB
当然你也可以只统计3G/GPRS流量统计 或者 WIFI流量统计。
- IOS源码开发获取当前的流量信息
- IOS源码开发获取当前的流量信息
- IOS源码开发获取当前的流量信息
- IOS源码开发获取当前的流量信息
- iphone获取当前流量信息
- iOS获取当前系统的相关信息
- 获取当前ios系统的版本信息
- IOS获取当前App的信息
- ios 获取当前app的版本信息
- 手机流量信息的获取
- iOS开发小技巧 获取当前设备/应用程序相关信息
- ios开发——获取当前设备信息
- IOS 获取当前版本信息
- iOS开发 获取当前WIFI的SSID
- iOS开发获取当前控制器的
- iOS获取当前版本号 Bundle Id等信息的方法
- [iOS]获取当前项目工程的名称版本等信息
- iOS获取当前版本号 Bundle ID等信息的方法
- 指针
- 豌豆荚与特洛伊木马
- 详解UML中的6大关系(关联、依赖、聚合、组合、泛化、实现)
- 第三次上机实验记录
- 1.1.1 嵌入式计算机
- IOS源码开发获取当前的流量信息
- Log4j属性文件配置的例子参考
- ubuntu下c/c++开发环境配置
- HTML5短语格式
- 2.1.6 ARM核简述
- 程序题:有多个33和1个199,找到不同的那个数字,不能对33和199进行硬比较
- 专题2-7优先级和类型转换分析
- 2.1.4 Thumb技术介绍
- 【Directx3D游戏开发】——简单渲染