正如标题所述。我想知道在特定时间特定应用程序每秒使用多少字节。
也许我可以使用“netstat“命令?但如果是这样,我如何将其过滤到特定的应用程序/进程?
我也需要得到许可才能这么做吗?
目前人们说使用NetworkStats. getUidRxManager(packageInfo.uid),但是,从这里:https://developer.android.com/reference/android/net/NetworkStats.html#getUidRxManager(int),它说N不支持它,我应该使用NetworkStatsManager。有没有使用它的例子?
也许是一个合并的解决方案?
编辑:我试图在Android N上使用NetworkStatsManager,但我失败了.我找不到任何如何使用它的示例,和所有关于它的stackOverflow问题都是类似的,不能很好地使用它.请,如果有人知道如何使用它,写一下.
3条答案
按热度按时间j2qf4p5b1#
NetworkStats
的用法并不复杂。设备API级别必须至少为23。以下是开始使用x1m1 n1x之前所需的一些步骤
1.在
AndroidManifest.xml
中解密所需的权限:字符串
1.在
Activity
中请求许可android.permission.PACKAGE_USAGE_STATS
不是普通权限,不能简单请求。要检查权限是否已被授予,请检查:型
要请求此权限,只需调用
Intent
:型
还需要另一个权限:
Manifest.permission.READ_PHONE_STATE
。但是,这是普通权限,因此可以是requested as any other permission1.使用
NetworkStatsManager
:要获取其引用,请调用:
型
从
NetworkStatsManager
检索的所有内容都打包到Buckets
中。这只是一个简单的POJO,它保存数据。全球:
获取WiFi的总体使用情况:
型
从
NetworkStats.Bucket
,可以调用两个方法来获取使用情况(以Bps为单位):型
获取移动的网络的数据比较困难,要获取x1m11 n1x呼叫:
型
适用范围:
要获取特定应用程序的数据,请阅读queryDetailsForUID的文档。
获取WiFi套餐使用情况:
型
获取移动的套餐使用情况:
型
不幸的是,根据这段代码,只能对
ConnectivityManager.TYPE_MOBILE
和ConnectivityManager.TYPE_WIFI
获取统计信息。做了一个Github repo的例子来演示用法。
tkqqtvp12#
还有一种复杂的方法来获取统计数据,但这应该适用于所有适配器:(但它很昂贵,因为你必须连续读取文件),
1.在这里,您可以看到所有适配器和发送/接收的数据:
字符串
1.您可以从这些文件中获取每个适配器的统计信息:
型
wlan 0可以是您所有的适配器,但您需要在应用中维护该值,因为如果您关闭/打开适配器,该值将再次为0。(您可以有RX和TX值)
1.您可以获取当前正在发送/接收的活动应用程序列表
型
这也可以通过tcp、tcp 6、upd、upd 6来完成
这里有一个“uid”列,它是你安装的应用程序的UID。(所以那个应用程序现在正在使用网络)
从这个文件中,您还可以看到连接端点。
1.检查每个应用程序的发送/接收字节数(如JavaScriptStats API调用)
型
这里的id是应用程序的UID,你也有发送的:tcp_snd和接收的:tcp_rcv文件。
1.您还可以使用以下命令进行一些进程和UID匹配:
型
这里的id是你可以从例如top命令中获得的进程id。在status文件中,你将拥有UID,即已安装/系统应用程序的UID。
+1.你也可以看看这个文件,JumicStats API使用这个:
型
标题:
型
价值观:
型
所以也许把第一个答案和这些知识结合起来,你可以得到更多更好的统计数据。
xzabzqsa3#
**更新:**不适用于Android 10及更高版本
通过/proc/net/dev添加我的简化函数以获取整体网络使用情况。
不需要唯一权限。
字符串