Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.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中的特定应用程序分别查找wifi和网络数据使用情况?_Android_Android Wifi_Android Networking - Fatal编程技术网

如何通过android中的特定应用程序分别查找wifi和网络数据使用情况?

如何通过android中的特定应用程序分别查找wifi和网络数据使用情况?,android,android-wifi,android-networking,Android,Android Wifi,Android Networking,我有应用程序id,我可以获得应用程序数据使用情况,但我无法获得更详细的信息,如使用wifi和网络的数据使用情况。我想为设备中安装的所有应用程序分别查找这两个。我怎么能找到那个。?我已经尝试了很多方法,但没有得到任何解决方案。不幸的是,到API级别19时,还没有公共API可以获取这些信息;您已经列出了可公开使用的TrafficStatsAPI。Android是通过内部API来实现的,所以除非你想走这条路(这是一个非常糟糕的主意,谷歌对此非常不鼓励),否则你现在就不走运了 编辑: 如果您坚持使用内部

我有应用程序id,我可以获得应用程序数据使用情况,但我无法获得更详细的信息,如使用wifi和网络的数据使用情况。我想为设备中安装的所有应用程序分别查找这两个。我怎么能找到那个。?我已经尝试了很多方法,但没有得到任何解决方案。

不幸的是,到API级别19时,还没有公共API可以获取这些信息;您已经列出了可公开使用的
TrafficStats
API。Android是通过内部API来实现的,所以除非你想走这条路(这是一个非常糟糕的主意,谷歌对此非常不鼓励),否则你现在就不走运了

编辑
如果您坚持使用内部API,并冒着代码在各种API版本中被破坏的风险,请参考以下链接,并确保彻底阅读它们:

一旦您实现了此功能,此文件将为您提供最大的帮助:

您必须从文件中复制大量代码,或者查找
processAppUsage()
函数并提取所需内容。尤其要注意以下几行:

recived = TrafficStats.getUidRxBytes(uid);
send = TrafficStats.getUidTxBytes(uid);

TrafficStats.getMobileRxBytes(); 
TrafficStats.getMobileTxBytes(); 

TrafficStats.getTotalRxBytes();
TrafficStats.getTotalTxBytes();

最后一点注意:Android刚刚在KitKat(API 19)中更改了这段代码,将来可能会再次更改。我再怎么强调也不过分,一旦他们决定再次更改,这将如何破坏你的应用程序。

我认为你应该使用另一种方式,通过UID获取流量,例如getUidRxPackets(int-UID)

还有帮助(如何获取UID):()

编辑:

您能告诉我如何确定wifi和 手机


有一个很好的答案-看看他的逻辑。

然后看看data manager和network monitor应用程序是如何工作的??在Android内部,有一些方法能够对每个UID的数据使用情况进行细分,并确定什么是移动数据,什么是wifi数据。然而,到目前为止,谷歌选择不将这些公开给第三方开发者使用。如果您希望使用内部API来获得访问权限,正如我所提到的,它目前可以工作,但一旦Google下一步更改代码(就像他们从4.3->4.4中所做的那样),它就很容易崩溃,这里发布的其他方法是跟踪Wifi连接时的连接变化,然后自己做计算,这会让您非常接近,但不能保证仅因为Wifi连接就可以通过Wifi使用所有数据。因此,任何不这样做并且声称能够单独获取这些值的人都在使用内部API。您能告诉我如何使用内部API吗?我非常清楚这一点。但正如我已经说过的,很多申请都是这样提出的,这就是我为什么要这样做的原因。我已经试过了,兄弟。你能告诉我如何确定wifi和手机使用了多少数据吗?请先了解我的问题。你们仍然不明白。为什么,我想这是你们的解决方案上面的答案:,在信息的底部,他解释他的逻辑。让我们看看
        // Add cost of wifi traffic
        final long wifiRx = u.getNetworkActivityCount(NETWORK_WIFI_RX_BYTES, mStatsType);
        final long wifiTx = u.getNetworkActivityCount(NETWORK_WIFI_TX_BYTES, mStatsType);