0

我需要获取安装在 android 手机上的每个应用程序的数据使用情况。

例如:我在手机上安装了 YouTube 应用程序,我需要通过 wifi 和移动数据获取 YouTube 应用程序的数据使用情况。

异常结果:

YouTube - 无线网络 - 500MB。

YouTube - 移动数据 - 100 KB

我尝试使用 TrafficStats API

int mobileTx = TrafficStats.getMobileTxBytes();
int mobileRx = TrafficStats.getMobileRxBytes();
int wifiTx = TrafficStats.getTotalTxBytes() - mobileTx;
int wifiRx = TrafficStats.getTotalRxBytes() - mobileRx;

以上给了我整个移动数据的使用情况,但我需要为每个应用程序获取。

4

2 回答 2

1

TrafficStats.getUidRxBytes(int uid)并且TrafficStats.getUidTxBytes(int uid)可以在这种情况下为您提供帮助,因为这些静态方法提供了有关自上次引导以来某个 UID 接收和传输的字节的信息。为此,您需要找到您需要详细信息的应用程序的 UID。要查找应用程序的 UID,您可以查看此线程 -如何从微调器中显示的列表中获取 android 应用程序的 uid 值?

于 2017-03-28T09:10:38.180 回答
0

您可以使用 TrafficStats 类中的getUidTxBytes API

long getUidTxBytes (int uid)
added in API level 8
Return number of bytes transmitted by the given UID since device boot. Counts packets across all network interfaces, and always increases monotonically since device boot. Statistics are measured at the network layer, so they include both TCP and UDP usage.
Before JELLY_BEAN_MR2, this may return UNSUPPORTED on devices where statistics aren't available.
Starting in N this will only report traffic statistics for the calling UID. It will return UNSUPPORTED for all other UIDs for privacy reasons. To access historical network statistics belonging to other UIDs, use NetworkStatsManager.

尽管这也告诉您必须使用NetworkStatsManager来获取调用应用程序以外的网络统计历史记录。

这里 uid 是这个进程的 uid 的标识符

于 2017-03-28T09:07:33.723 回答