Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何获取所有UID的数据使用情况报告';s正在使用新的NetworkStatsManager类_Android_Android 6.0 Marshmallow_Networkstatsmanager - Fatal编程技术网

Android 如何获取所有UID的数据使用情况报告';s正在使用新的NetworkStatsManager类

Android 如何获取所有UID的数据使用情况报告';s正在使用新的NetworkStatsManager类,android,android-6.0-marshmallow,networkstatsmanager,Android,Android 6.0 Marshmallow,Networkstatsmanager,我正在构建一个data manager应用程序,它需要通过移动和wifi接口提供每个应用程序的数据使用情况报告 在尝试使用“NetworkStatsManager.querySummary”方法时,我只获得一些UID的使用情况报告,但不是全部。而该方法的API确实说 结果筛选为仅包含属于调用用户的UID 我不清楚哪些UID属于调用用户,哪些不属于调用用户。请帮助我了解差异,以及如何使用此新的“NetworkStatsManager”类获取所有UID的数据使用情况报告。可以获取设备的摘要。请使用另

我正在构建一个data manager应用程序,它需要通过移动和wifi接口提供每个应用程序的数据使用情况报告

在尝试使用“NetworkStatsManager.querySummary”方法时,我只获得一些UID的使用情况报告,但不是全部。而该方法的API确实说

结果筛选为仅包含属于调用用户的UID


我不清楚哪些UID属于调用用户,哪些不属于调用用户。请帮助我了解差异,以及如何使用此新的“NetworkStatsManager”类获取所有UID的数据使用情况报告。

可以获取设备的摘要。请使用另一种方法:。以下是示例用法:

WiFi:

NetworkStats.Bucket bucket;
try {
    bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI,
            "",
            0,
            System.currentTimeMillis());
} catch (RemoteException e) {
    return -1;
}
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 "";
}
手机:

NetworkStats.Bucket bucket;
try {
    bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI,
            "",
            0,
            System.currentTimeMillis());
} catch (RemoteException e) {
    return -1;
}
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 "";
}
要获取接收或发送字节,只需调用:

bucket.getRxBytes();
bucket.getTxBytes();

制作了一个示例来演示其用法。

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

long DataUsageWithRejectToUID=GetPackageXBytesMobile(此)+GetPackageXBytesMobile(此)+GetPackageXBytesMobile()+GetPackageXBytesSwifi()


所以我检查了你的存储库,发现它为每个UID提供了相同的信息-我不知道出了什么问题!我使用JB从github运行了这个应用程序。通过TrafficStats,TX和RX得到了-1b。NetworkStats得到了预期的“未实现”。有计划更新以支持JB吗?