मैंने इस विषय पर खोज की है, लेकिन बहुत कम विवरण मिले जो मददगार थे। इन विवरणों के साथ मैंने कुछ कोड पकाने की कोशिश की है।
नोट: कृपया इस पोस्ट में साझा किए गए विवरण की तुलना DUPLICATE के रूप में चिह्नित करने से पहले अन्य पदों के साथ करें, न कि केवल विषय द्वारा।
- (NSArray *)getDataCountersForType:(int)type {
BOOL success;
struct ifaddrs *addrs = nil;
const struct ifaddrs *cursor = nil;
const struct sockaddr_dl *dlAddr = nil;
const struct if_data *networkStatisc = nil;
int dataSent = 0;
int dataReceived = 0;
success = getifaddrs(&addrs) == 0;
if (success) {
cursor = addrs;
while (cursor != NULL) {
if (cursor->ifa_addr->sa_family == AF_LINK) {
dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
networkStatisc = (const struct if_data *) cursor->ifa_data;
if (type == WiFi) {
dataSent += networkStatisc->ifi_opackets;
dataReceived += networkStatisc->ifi_ipackets;
}
else if (type == WWAN) {
dataSent += networkStatisc->ifi_obytes;
dataReceived += networkStatisc->ifi_ibytes;
}
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
}
return [NSArray arrayWithObjects:[NSNumber numberWithInt:dataSent], [NSNumber numberWithInt:dataReceived], nil];
}
यह कोड एक iPhone डिवाइस के इंटरनेट उपयोग की जानकारी एकत्र करता है (और अकेले मेरा आवेदन नहीं)।
अब, यदि मैं वाईफाई के माध्यम से या 3 जी के माध्यम से इंटरनेट का उपयोग करता हूं, तो मुझे केवल ifi_obytes
(भेजे गए) और ifi_ibytes
(प्राप्त) में डेटा (बाइट्स) मिलता है, लेकिन मुझे लगता है कि मुझे वाईफाई उपयोग में ifi_opackets
और प्राप्त करना चाहिए ifi_ipackets
।
इसके अलावा जोड़ने के लिए है कि अगर मैं एक WiFi नेटवर्क से कनेक्ट हूँ, लेकिन इंटरनेट का उपयोग नहीं कर रहा हूँ, मैं अभी भी मूल्य में जुड़ती चाहता था ifi_obytes
और ifi_ibytes
।
हो सकता है कि मैं कार्यान्वयन या समझ में गलत हूं। मेरी मदद करने के लिए किसी की जरूरत है।
संपादित करें: इसके बजाय AF_LINK
मैंने कोशिश की AF_INET
( sockaddr_in
इसके बजाय sockaddr_dl
)। इससे एप्लिकेशन क्रैश हो जाता है।