我需要获取安装在安卓手机上的每个应用程序的数据使用情况。
例如:我在手机上安装了YouTube应用程序,我需要通过wifi和移动数据获取YouTube应用程序的数据使用情况。
例外结果:
优酷 - 无线网络 - 500MB。
优酷 - 移动数据 - 100 KB
我尝试使用 TrafficStats API
int mobileTx = TrafficStats.getMobileTxBytes();
int mobileRx = TrafficStats.getMobileRxBytes();
int wifiTx = TrafficStats.getTotalTxBytes() - mobileTx;
int wifiRx = TrafficStats.getTotalRxBytes() - mobileRx;
以上内容为我提供了移动整个数据使用情况,但我需要获取每个应用程序。
TrafficStats.getUidRxBytes(int uid)
和TrafficStats.getUidTxBytes(int uid)
可以在这种情况下为您提供帮助,因为这些静态方法提供了自上次由某些UID启动以来接收和传输的字节的信息。 为此,您需要找到需要详细信息的应用程序的UID。要查找应用程序的 UID,您可以查看此线程 - 如何从微调器中显示的列表中获取 android 应用程序的 uid 值?
您可以使用 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 的标识符