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