Sag*_*yad 13 android android-networking android-wifi
recived = TrafficStats.getUidRxBytes(uid);
send = TrafficStats.getUidTxBytes(uid);
TrafficStats.getMobileRxBytes();
TrafficStats.getMobileTxBytes();
TrafficStats.getTotalRxBytes();
TrafficStats.getTotalTxBytes();
Run Code Online (Sandbox Code Playgroud)
我有应用程序ID,我可以获得该应用程序数据使用,但我无法获得更详细的信息,如使用wifi和网络的数据使用.我想在设备中单独找到所有已安装的应用程序.我怎么能找到那个.?我已经尝试了很多东西,但没有得到任何解决方案.
我认为你应该使用替代方式,通过UID获取流量,例如 - getUidRxPackets(int uid)
也有帮助(如何获取UID):( 如何在Android手机上安装所有应用程序)
编辑:
你能告诉我如何判断无线和移动使用多少数据.
有一个很好的答案 - 每个APP的android统计3g流量,怎么样?看他的逻辑.
不幸的是,从 API 级别 19 开始,没有公共 API 可以获取该信息;您已列出了TrafficStats公开可用的 API。Android 使用内部 API 来实现这一点,因此除非您想走这条路(这是一个非常糟糕的主意,并且 Google 强烈反对),否则您现在运气不好。
编辑:
如果您坚持使用内部 API 并冒着在各种 API 版本中破坏代码的风险,请参阅以下链接并务必仔细阅读它们:
重新编译 Android SDK 以使用隐藏和内部 API
重新编译适用于 Gingerbread 及更高版本的 Android SDK
一旦你实现了这个,这个文件将为你提供最大的帮助来解决这个问题:
包/应用/设置/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);
Run Code Online (Sandbox Code Playgroud)
最后一点:Android 刚刚在 KitKat (API 19) 中更改了此代码,并且将来可能会再次更改。一旦他们决定再次更改,我无法充分强调这将如何破坏您的应用程序。