首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用新的NetworkStatsManager类获取所有UID的数据使用情况报告

如何使用新的NetworkStatsManager类获取所有UID的数据使用情况报告
EN

Stack Overflow用户
提问于 2016-08-05 07:44:55
回答 2查看 2.6K关注 0票数 2

我正在构建一个数据管理应用程序,它需要移动和wifi接口上的每个应用程序的数据使用情况报告。

在尝试使用"NetworkStatsManager.querySummary“方法时,我只得到一些UID的使用报告,而不是全部。而方法的API 文档确实说

结果筛选为只包含属于调用用户的uids。

我不清楚哪个UID属于调用用户,哪些不属于调用用户。请帮助我理解不同之处,以及如何为所有使用这个新的"NetworkStatsManager“类的UID获取数据使用报告。

EN

回答 2

Stack Overflow用户

发布于 2016-09-09 13:08:26

获得设备的摘要是可能的。只需使用另一种方法:android.app.usage.NetworkStatsManager#querySummaryForDevice。下面是示例用法:

WiFi:

代码语言:javascript
复制
NetworkStats.Bucket bucket;
try {
    bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI,
            "",
            0,
            System.currentTimeMillis());
} catch (RemoteException e) {
    return -1;
}

手机:

代码语言:javascript
复制
public long getAllTxBytesMobile(Context context) {
    NetworkStats.Bucket bucket;
    try {
        bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE,
                getSubscriberId(context, ConnectivityManager.TYPE_MOBILE),
                0,
                System.currentTimeMillis());
    } catch (RemoteException e) {
        return -1;
    }
    return bucket.getTxBytes();
}

private String getSubscriberId(Context context, int networkType) {
    if (ConnectivityManager.TYPE_MOBILE == networkType) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        return tm.getSubscriberId();
    }
    return "";
}

要获取Rx或Tx字节,只需调用:

代码语言:javascript
复制
bucket.getRxBytes();
bucket.getTxBytes();

制作了一个演示使用情况的示例Github回购

票数 1
EN

Stack Overflow用户

发布于 2017-01-09 17:36:30

问题就像询问每个应用程序的数据用法一样。不是整个设备的使用。因此,对于每个uid,我们需要相应的应用程序的数据使用。下面的内容用于获取特定uid的数据使用情况。这也不适用于所有设备。我检查并后来了解到,在某些设备中,即使在我们授予应用程序使用跟踪权限之后,这也是不可用的。不过,这是一个系统级别的权限。

long dataUsageWithRespectToUid = getPackageRxBytesMobile(this)+ getPackageTxBytesMobile(this) + getPackageRxBytesWifi() +getPackageTxBytesWifi();

代码语言:javascript
复制
public long getPackageRxBytesMobile(Context context) {
    NetworkStats networkStats = null;
    try {
        networkStats = networkStatsManager.queryDetailsForUid(
                ConnectivityManager.TYPE_MOBILE,
                getSubscriberId(context, ConnectivityManager.TYPE_MOBILE),
                0,
                System.currentTimeMillis(),
                packageUid);
    } catch (RemoteException e) {
        return -1;
    }
    NetworkStats.Bucket bucket = new NetworkStats.Bucket();
    networkStats.getNextBucket(bucket);
    networkStats.getNextBucket(bucket);
    return bucket.getRxBytes();
}

public long getPackageTxBytesMobile(Context context) {
    NetworkStats networkStats = null;
    try {
        networkStats = networkStatsManager.queryDetailsForUid(
                ConnectivityManager.TYPE_MOBILE,
                getSubscriberId(context, ConnectivityManager.TYPE_MOBILE),
                0,
                System.currentTimeMillis(),
                packageUid);
    } catch (RemoteException e) {
        return -1;
    }
    NetworkStats.Bucket bucket = new NetworkStats.Bucket();
    networkStats.getNextBucket(bucket);
    return bucket.getTxBytes();
}

public long getPackageRxBytesWifi() {
    NetworkStats networkStats = null;
    try {
        networkStats = networkStatsManager.queryDetailsForUid(
                ConnectivityManager.TYPE_WIFI,
                "",
                0,
                System.currentTimeMillis(),
                packageUid);
    } catch (RemoteException e) {
        return -1;
    }
    NetworkStats.Bucket bucket = new NetworkStats.Bucket();
    networkStats.getNextBucket(bucket);
    return bucket.getRxBytes();
}

public long getPackageTxBytesWifi() {
    NetworkStats networkStats = null;
    try {
        networkStats = networkStatsManager.queryDetailsForUid(
                ConnectivityManager.TYPE_WIFI,
                "",
                0,
                System.currentTimeMillis(),
                packageUid);
    } catch (RemoteException e) {
        return -1;
    }
    NetworkStats.Bucket bucket = new NetworkStats.Bucket();
    networkStats.getNextBucket(bucket);
    return bucket.getTxBytes();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38783836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档