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

时间:2013-11-17 07:00:23

标签: android android-wifi android-networking

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

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

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

我有应用程序ID,我可以获得该应用程序数据使用但我无法获得更详细的信息,如使用wifi和网络的数据使用。我想在设备中单独找到所有已安装的应用程序。我怎么能找到那个。?我已经尝试了很多东西,但没有得到任何解决方案。

2 个答案:

答案 0 :(得分:5)

我认为您应该使用替代方式,通过UID获取流量,例如 - getUidRxPackets(int uid)

也很有用(如何获取UID):( How to get all apps installed on android phone

编辑:

  

你能告诉我如何判断wifi和数据的使用量   移动。??

有一个很好的答案 - android statistic 3g traffic for each APP, how?看他的逻辑。

答案 1 :(得分:2)

不幸的是,从API级别19开始,没有公共API可以获取该信息;您已经列出了公开可用的TrafficStats API。 Android使用内部API来做到这一点,所以除非你想要走这条路(这是一个非常糟糕的想法并且谷歌非常劝阻),你现在运气不好。

修改
如果您坚持使用内部API并在各种API版本中冒险破坏代码,请参阅以下链接并确保彻底阅读:
Recompiling Android SDK to use hidden and internal APIs
Recompiling Android SDK for Gingerbread and later

实施此功能后,此文件将为您提供最大的帮助:

  

packages/apps/Settings/src/com/android/settings/fuelgauge/BatteryStatsHelper.java

您必须从文件中复制大量代码或查找processAppUsage()函数并提取您需要的任何内容。特别是,寻找这些行:

        // 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);

最后一点说明:Android JUST在KitKat(API 19)中更改了此代码,并且可能在将来再次更改此代码。我不能强调一旦他们决定再次改变,这会破坏你的应用程序。