5
Q
स्विफ्ट
A
उत्तर
1
स्विफ्ट 4 में अपडेट किया गया है, तो आप इस आसान एक्सटेंशन का उपयोग कर सकते हैं। डिवाइस सेल और वाईफाई उपयोग को ट्रैक करने के लिए।
extension SystemDataUsage {
public static var wifiCompelete: UInt64 {
return SystemDataUsage.getDataUsage().wifiSent + SystemDataUsage.getDataUsage().wifiReceived
}
public static var wwanCompelete: UInt64 {
return SystemDataUsage.getDataUsage().wirelessWanDataSent + SystemDataUsage.getDataUsage().wirelessWanDataReceived
}
}
class SystemDataUsage {
private static let wwanInterfacePrefix = "pdp_ip"
private static let wifiInterfacePrefix = "en"
class func getDataUsage() -> DataUsageInfo {
var ifaddr: UnsafeMutablePointer<ifaddrs>?
var dataUsageInfo = DataUsageInfo()
guard getifaddrs(&ifaddr) == 0 else { return dataUsageInfo }
while let addr = ifaddr {
guard let info = getDataUsageInfo(from: addr) else {
ifaddr = addr.pointee.ifa_next
continue
}
dataUsageInfo.updateInfoByAdding(info)
ifaddr = addr.pointee.ifa_next
}
freeifaddrs(ifaddr)
return dataUsageInfo
}
private class func getDataUsageInfo(from infoPointer: UnsafeMutablePointer<ifaddrs>) -> DataUsageInfo? {
let pointer = infoPointer
let name: String! = String(cString: pointer.pointee.ifa_name)
let addr = pointer.pointee.ifa_addr.pointee
guard addr.sa_family == UInt8(AF_LINK) else { return nil }
return dataUsageInfo(from: pointer, name: name)
}
private class func dataUsageInfo(from pointer: UnsafeMutablePointer<ifaddrs>, name: String) -> DataUsageInfo {
var networkData: UnsafeMutablePointer<if_data>?
var dataUsageInfo = DataUsageInfo()
if name.hasPrefix(wifiInterfacePrefix) {
networkData = unsafeBitCast(pointer.pointee.ifa_data, to: UnsafeMutablePointer<if_data>.self)
if let data = networkData {
dataUsageInfo.wifiSent += UInt64(data.pointee.ifi_obytes)
dataUsageInfo.wifiReceived += UInt64(data.pointee.ifi_ibytes)
}
} else if name.hasPrefix(wwanInterfacePrefix) {
networkData = unsafeBitCast(pointer.pointee.ifa_data, to: UnsafeMutablePointer<if_data>.self)
if let data = networkData {
dataUsageInfo.wirelessWanDataSent += UInt64(data.pointee.ifi_obytes)
dataUsageInfo.wirelessWanDataReceived += UInt64(data.pointee.ifi_ibytes)
}
}
return dataUsageInfo
}
}
struct DataUsageInfo {
var wifiReceived: UInt64 = 0
var wifiSent: UInt64 = 0
var wirelessWanDataReceived: UInt64 = 0
var wirelessWanDataSent: UInt64 = 0
mutating func updateInfoByAdding(_ info: DataUsageInfo) {
wifiSent += info.wifiSent
wifiReceived += info.wifiReceived
wirelessWanDataSent += info.wirelessWanDataSent
wirelessWanDataReceived += info.wirelessWanDataReceived
}
}
आप इसे पसंद का उपयोग कर सकते हैं: SystemDataUsage.wifiCompelete
+0
यह उपयोग समग्र डिवाइस या एकल ऐप के लिए है –
संबंधित मुद्दे
- 1. स्विफ्ट: (स्विफ्ट) वर्ण
- 2. स्विफ्ट
- 3. स्विफ्ट
- 4. स्विफ्ट
- 5. स्विफ्ट
- 6. स्विफ्ट
- 7. स्विफ्ट
- 8. स्विफ्ट
- 9. स्विफ्ट
- 10. स्विफ्ट
- 11. स्विफ्ट
- 12. स्विफ्ट
- 13. स्विफ्ट
- 14. स्विफ्ट
- 15. स्विफ्ट
- 16. स्विफ्ट
- 17. स्विफ्ट
- 18. स्विफ्ट
- 19. स्विफ्ट
- 20. स्विफ्ट
- 21. स्विफ्ट
- 22. स्विफ्ट
- 23. स्विफ्ट
- 24. स्विफ्ट
- 25. स्विफ्ट
- 26. स्विफ्ट
- 27. स्विफ्ट
- 28. स्विफ्ट
- 29. स्विफ्ट
बाहर चेक __ [इस सवाल] (http://stackoverflow.com/questions/7946699/iphone-data-usage-tracking-monitoring/8014012#8014012) __। यह उद्देश्य - सी के लिए है, लेकिन मुझे लगता है कि आप इसे स्विफ्ट में काम करने के लिए थोड़ा सा प्रयास कर सकते हैं। – aksh1t