IOS获取系统流量

uniapp 原生插件IOS获取系统流量
做下笔记更新下,之前资料需要更新下
找的资料有地方需要适配最新系统

添加 SystemConfiguration.framework  
加入头文件 
/// 获取网络流量
#include <ifaddrs.h>
#include <sys/socket.h>
#include <net/if.h>

#pragma mark -- 获取手机系统流量
-(NSString *)bytesToAvaiUnit:(double)bytes
{
    
    
    if(bytes < 1024){
    
     // B
        return [NSString stringWithFormat:@"%.0fB", bytes];
    } else if(bytes >= 1024 && bytes < 1024 * 1024) {
    
     // KB
        return [NSString stringWithFormat:@"%.1fKB", bytes / 1024];
    } else if(bytes >= 1024 * 1024 && bytes < 1024 * 1024 * 1024) {
    
    // MB
        return [NSString stringWithFormat:@"%.2fMB", bytes / (1024 * 1024)];
    } else {
    
     // GB
        return [NSString stringWithFormat:@"%.3fGB", 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 IF_DATA_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);
        }
        //<span style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; ">WIFI流量统计功能</span>
        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;
        }
        //<span style="font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; ">3G和GPRS流量统计</span>
        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);
}

调用:
[self checkNetworkflow];
打印结果:
2022-11-21 11:49:30.616967+0800 UniPluginDemo[32755:909602] changeTime==Wed Nov 16 17:04:35 2022
2022-11-21 11:49:30.617152+0800 UniPluginDemo[32755:909602] receivedBytes==2.135GB
2022-11-21 11:49:30.617219+0800 UniPluginDemo[32755:909602] sentBytes==147.23MB
2022-11-21 11:49:30.617278+0800 UniPluginDemo[32755:909602] networkFlow==2.279GB
2022-11-21 11:49:30.617336+0800 UniPluginDemo[32755:909602] wifiReceived==2.114GB
2022-11-21 11:49:30.617392+0800 UniPluginDemo[32755:909602] wifiSent==142.70MB
2022-11-21 11:49:30.617450+0800 UniPluginDemo[32755:909602] wifiBytes==2.253GB
2022-11-21 11:49:30.617508+0800 UniPluginDemo[32755:909602] wwanReceived==0B
2022-11-21 11:49:30.617968+0800 UniPluginDemo[32755:909602] wwanSent==0B
2022-11-21 11:49:30.618053+0800 UniPluginDemo[32755:909602] wwanBytes==0B

参考资料:
https://www.cnblogs.com/jx66/p/5750191.html

猜你喜欢

转载自blog.csdn.net/iOS_MingXing/article/details/127961743