快速跟踪蜂窝数据的使用情况

萨奇布·奥默尔

有什么方法可以快速跟踪设备使用的蜂窝数据?有没有api?我正在努力实现这样的目标

BilalReffas

更新到Swift 4,您可以使用此简单扩展。跟踪设备单元和wifi的使用情况。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

跟踪iPhone数据使用情况

来自分类Dev

木偶查找数据使用情况

来自分类Dev

是否有OpenWRT功能可跟踪每个用户的互联网数据使用情况?

来自分类Dev

信标测距与GPS跟踪电池使用情况

来自分类Dev

如何随时间跟踪程序的磁盘使用情况?

来自分类Dev

跟踪页面的CSS使用情况

来自分类Dev

如何在Mac上跟踪资源使用情况?

来自分类Dev

在 Python 中跟踪/记录实例的方法使用情况

来自分类Dev

Reporting Services 本地使用情况跟踪

来自分类Dev

ORACLE数据库资源使用情况

来自分类Dev

查找每个wifi用户的数据使用情况

来自分类Dev

衡量路由器数据使用情况的硬件

来自分类Dev

诊断和使用情况数据选项已禁用

来自分类Dev

OpenNebula LVM数据存储使用情况问题

来自分类Dev

Google如何在没有密钥的情况下跟踪Google地图的使用情况

来自分类Dev

如何从重复分配中跟踪生命周期堆使用情况

来自分类Dev

Firebase安全规则,可防止客户规避使用情况跟踪

来自分类Dev

在Lollipop之前的设备上在Android上跟踪每个应用的使用情况

来自分类Dev

不显示在缓存中时跟踪Linux内存使用情况

来自分类Dev

如何在Linux上跟踪互联网使用情况(上传和下载)?

来自分类Dev

调用并跟踪一个进程的内存使用情况

来自分类Dev

如何在Mac上跟踪和记录CPU和内存使用情况?

来自分类Dev

在Windows XP上分析和跟踪资源使用情况的工具

来自分类Dev

如何跟踪Linux和其他* nix OS中的IO使用情况?

来自分类Dev

如何跟踪局域网使用情况?(又名“ LAN的顶部”)

来自分类Dev

未显示在缓存中时跟踪Linux内存使用情况

来自分类Dev

Polymer-通过Google Analytics(分析)跟踪应用使用情况

来自分类Dev

在Ubuntu 14.04上跟踪详细的MATLAB内存使用情况

来自分类Dev

跟踪Amazon S3上用户存储使用情况的最佳实践

Related 相关文章

  1. 1

    跟踪iPhone数据使用情况

  2. 2

    木偶查找数据使用情况

  3. 3

    是否有OpenWRT功能可跟踪每个用户的互联网数据使用情况?

  4. 4

    信标测距与GPS跟踪电池使用情况

  5. 5

    如何随时间跟踪程序的磁盘使用情况?

  6. 6

    跟踪页面的CSS使用情况

  7. 7

    如何在Mac上跟踪资源使用情况?

  8. 8

    在 Python 中跟踪/记录实例的方法使用情况

  9. 9

    Reporting Services 本地使用情况跟踪

  10. 10

    ORACLE数据库资源使用情况

  11. 11

    查找每个wifi用户的数据使用情况

  12. 12

    衡量路由器数据使用情况的硬件

  13. 13

    诊断和使用情况数据选项已禁用

  14. 14

    OpenNebula LVM数据存储使用情况问题

  15. 15

    Google如何在没有密钥的情况下跟踪Google地图的使用情况

  16. 16

    如何从重复分配中跟踪生命周期堆使用情况

  17. 17

    Firebase安全规则,可防止客户规避使用情况跟踪

  18. 18

    在Lollipop之前的设备上在Android上跟踪每个应用的使用情况

  19. 19

    不显示在缓存中时跟踪Linux内存使用情况

  20. 20

    如何在Linux上跟踪互联网使用情况(上传和下载)?

  21. 21

    调用并跟踪一个进程的内存使用情况

  22. 22

    如何在Mac上跟踪和记录CPU和内存使用情况?

  23. 23

    在Windows XP上分析和跟踪资源使用情况的工具

  24. 24

    如何跟踪Linux和其他* nix OS中的IO使用情况?

  25. 25

    如何跟踪局域网使用情况?(又名“ LAN的顶部”)

  26. 26

    未显示在缓存中时跟踪Linux内存使用情况

  27. 27

    Polymer-通过Google Analytics(分析)跟踪应用使用情况

  28. 28

    在Ubuntu 14.04上跟踪详细的MATLAB内存使用情况

  29. 29

    跟踪Amazon S3上用户存储使用情况的最佳实践

热门标签

归档