iOS 流量统计,ios流量统计
iOS 流量统计,ios流量统计
在网上查了一下关于流量统计的资料,整理了一下Demo地址
#import "FolwBytesTools.h"
#include <arpa/inet.h>
#include <net/if.h>
#include <ifaddrs.h>
#include <net/if_dl.h>
typedef enum {
FolwBytesNumWiFiSent = 1, //WiFi状态下发送流量
FolwBytesNumWiFiReceived = 2, //WiFi状态下接收流量
FolwBytesNumWiFiTotal = 3, //WiFi状态下消耗总流量
FolwBytesNumWWANSent = 4, //移动网络下发送流量
FolwBytesNumWWANReceived = 5, //移动网络下接收流量
FolwBytesNumWWANTotal = 6, //移动网络下消耗总流量
}FolwBytesNum;
@implementation FolwBytesTools
+(FolwBytesTools *)sharedInstance
{
static dispatch_once_t onceToken;
static FolwBytesTools * sSharedInstance;
dispatch_once(&onceToken, ^{
sSharedInstance = [[FolwBytesTools alloc] init];
});
return sSharedInstance;
}
/*
WiFi状态下发送流量
*/
- (NSString *)getWiFiSentFolwBytes
{
NSString *bytesStr;
bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiSent];
return bytesStr;
}
/*
WiFi状态下接收流量
*/
- (NSString *)getWiFiReceivedFolwBytes
{
NSString *bytesStr;
bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiReceived];
return bytesStr;
}
/*
WiFi状态下消耗总流量
*/
- (NSString *)getWiFiTotalFolwBytes
{
NSString *bytesStr;
bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiTotal];
return bytesStr;
}
/*
WiFi状态下单个请求消耗流量
*/
- (NSString *)getWiFiFolwDifferenceBytes
{
NSString *bytesStr;
bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiTotal];
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSString *dBytes = [userDefault objectForKey:@"WiFiFolwDifferenceBytes"];
[userDefault setObject:bytesStr forKey:@"WiFiFolwDifferenceBytes"];
[userDefault synchronize];
NSInteger nowBytes = [bytesStr integerValue];
NSInteger oldBytes = [dBytes integerValue];
NSInteger dIntBytes = nowBytes - oldBytes;
bytesStr = [NSString stringWithFormat:@"%ld",dIntBytes];
return bytesStr;
}
/*
移动网络下发送流量
*/
- (NSString *)getWWANSentFolwBytes
{
NSString *bytesStr;
bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWWANSent];
return bytesStr;
}
/*
移动网络下接收流量
*/
- (NSString *)getWWANReceivedFolwBytes
{
NSString *bytesStr;
bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWWANReceived];
return bytesStr;
}
/*
移动网络下消耗总流量
*/
- (NSString *)getWWANTotalFolwBytes
{
NSString *bytesStr;
bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWWANTotal];
return bytesStr;
}
/*
移动网络下单个请求消耗流量
*/
- (NSString *)getWWANFolwDifferenceBytes
{
NSString *bytesStr;
bytesStr = [self getFolwBytesWithTyep:FolwBytesNumWiFiTotal];
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSString *dBytes = [userDefault objectForKey:@"WWANFolwDifferenceBytes"];
[userDefault setObject:bytesStr forKey:@"WWANFolwDifferenceBytes"];
[userDefault synchronize];
NSInteger nowBytes = [bytesStr integerValue];
NSInteger oldBytes = [dBytes integerValue];
NSInteger dIntBytes = nowBytes - oldBytes;
bytesStr = [NSString stringWithFormat:@"%ld",dIntBytes];
return bytesStr;
}
- (NSString *)getFolwBytesWithTyep:(FolwBytesNum)typeNum
{
NSString *bytesStr;
BOOL success;
struct ifaddrs *addrs;
const struct ifaddrs *cursor;
const struct if_data *networkStatisc;
int WiFiSent = 0;
int WiFiReceived = 0;
int WWANSent = 0;
int WWANReceived = 0;
NSString *name=[[NSString alloc]init];
success = getifaddrs(&addrs) == 0;
if (success) {
cursor = addrs;
while (cursor != NULL) {
name=[NSString stringWithFormat:@"%s",cursor->ifa_name];
if (cursor->ifa_addr->sa_family == AF_LINK) {
//wifi消耗流量
if ([name hasPrefix:@"en"]) {
networkStatisc = (const struct if_data *) cursor->ifa_data;
WiFiSent+=networkStatisc->ifi_obytes;
WiFiReceived+=networkStatisc->ifi_ibytes;
}
//移动网络消耗流量
if ([name hasPrefix:@"pdp_ip0"]) {
networkStatisc = (const struct if_data *) cursor->ifa_data;
WWANSent+=networkStatisc->ifi_obytes;
WWANReceived+=networkStatisc->ifi_ibytes;
}
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
}
if(typeNum == FolwBytesNumWiFiSent)
{
bytesStr = [NSString stringWithFormat:@"%d",WiFiSent];
}else if(typeNum == FolwBytesNumWiFiReceived)
{
bytesStr = [NSString stringWithFormat:@"%d",WiFiReceived];
}else if(typeNum == FolwBytesNumWiFiTotal)
{
bytesStr = [NSString stringWithFormat:@"%d",WiFiSent + WiFiReceived];
}else if(typeNum == FolwBytesNumWWANSent)
{
bytesStr = [NSString stringWithFormat:@"%d",WWANSent];
}else if(typeNum == FolwBytesNumWWANReceived)
{
bytesStr = [NSString stringWithFormat:@"%d",WWANReceived];
}else if(typeNum == FolwBytesNumWWANTotal)
{
bytesStr = [NSString stringWithFormat:@"%d",WWANSent+WWANReceived];
}
return bytesStr;
}
评论暂时关闭