iOSは携帯電話のトラフィック使用状況を監視する開発


携帯電話の使用流量を取得するにはいくつかの問題があります:1 iOSはAndroidのように起動放送と停止放送を傍受することができません.すぐに電源を切ってから起動します.監視するモバイルネットワークの下の流量はデフォルトで空になります.②アプリケーションがバックグラウンドで実行された場合、突然殺され、トラフィック統計ができなくなり、アプリケーションがバックグラウンドに入ったときにトラフィック使用状況を保存する必要がある③ユーザがトラフィック統計ソフトを初めて開いたのは2月で、3ヶ月目に開いた場合、2月に使用したトラフィックをクリアする必要がある.しかし問題が来て、私たちが得ることができるのはモニタリングから始めて、消費する総流量です.セットの流量は毎月1000 Mで、もし2月に200 Mの流量を消費したら、3月に300 Mの流量を消費して、私達は3月の流量の残りの情況を判断することができなくて、私達の獲得した使用流量は500 Mです.新しい1ヶ月が始まると、ユーザーは初めてappを開き、残りのトラフィックの再設定をユーザーに注意することをお勧めします.
注意:このコードのコアコード:HTTrafficを本体でテストしてください.h
#import 

@interface HTTraffic : NSObject

+ (NSDictionary *)getTrafficMonitorings;

@end

HTTraffic.m
#import "HTTraffic.h"
#include 
#include 
#include 
#include 

@implementation HTTraffic

/**
 *  WiFiSent WiFi    
 *  WiFiReceived WiFi    
 *  WWANSent         
 *  WWANReceived         
 */
+ (NSDictionary *)getTrafficMonitorings {
    NSDictionary * trafficDict = [[NSDictionary alloc] init];
    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);
    }
    NSString *WiFiSentTraffic = [NSString stringWithFormat:@"%d",WiFiSent];
    NSString *WiFiReceivedTraffic = [NSString stringWithFormat:@"%d",WiFiReceived];
    NSString *WiFiTotalTraffic = [NSString stringWithFormat:@"%d",WiFiSent + WiFiReceived];
    NSString *WWANSentTraffic = [NSString stringWithFormat:@"%d",WWANSent];
    NSString *WWANReceivedTraffic = [NSString stringWithFormat:@"%d",WWANReceived];
    NSString *WWANTotalTraffic = [NSString stringWithFormat:@"%d",WWANSent+WWANReceived];
    trafficDict = @{
                    @"WiFiSentTraffic":WiFiSentTraffic,
                    @"WiFiReceivedTraffic":WiFiReceivedTraffic,
                    @"WiFiTotalTraffic":WiFiTotalTraffic,
                    @"WWANSentTraffic":WWANSentTraffic,
                    @"WWANReceivedTraffic":WWANReceivedTraffic,
                    @"WWANTotalTraffic":WWANTotalTraffic
                    };

    return trafficDict;
}

@end

流量モニタdemo