我使用TrafficStats.getUidRxBytes
来获取网络使用情况。它适用于我的应用程序,但对于其他应用程序总是返回 -1(不支持)。如何在没有root权限的情况下获取其他应用程序的网络使用情况?
从 android 7 开始,您只能查询自己的应用流量使用情况。从TraffixStats.getUidRxBytes
文档中:
从
N
年开始,这将仅报告调用 UID 的流量统计信息。出于隐私原因,它将返回所有其他 UID 的"不受支持"。要访问属于其他 UID 的历史网络统计信息,请使用NetworkStatsManager
。
去NetworkStatsManager
,你可以使用queryDetailsForUid
,但正如文档(https://developer.android.com/reference/android/app/usage/NetworkStatsManager.html)所说:
注意:调用
querySummaryForDevice(int, String, long, long)
或访问调用应用程序以外的应用程序的统计信息需要权限PACKAGE_USAGE_STATS
,这是系统级权限,不会授予第三方应用程序。但是,声明权限意味着打算使用 API,设备的用户可以通过"设置"应用程序授予权限。
因此,请注意,用户必须为您的应用授予一些特殊权限。
编辑:
我用过一次UsageStatsManager
,我认为这就是你要找的:https://developer.android.com/reference/android/app/usage/UsageStatsManager.html#queryUsageStats(int,%20long,%20long)