android – 如何获取我的应用程序的移动数据使用情况(例如使用TrafficStats)

(我认为这是一个常见的问题,但请不要太快,因为我相信我的答案会为讨论添加一些新内容.)

相关的API是TrafficStats,它从例如它获取数据.的/ proc / uid_stat /.

统计数据必须包括GCM等,而不仅仅是我发起的东西,因此基于线程和标记的计数器是不够的.

第一个问题是基于UID(即每个应用程序)获得移动数据使用的API显然不存在.有getMobile API和getUid API,但没有任何组合它们.我建议在下面给出一个解决方案.

更重要的是,我得到的印象是TrafficStats有太多的bug可用于这个通用目的.我把它作为一个可能的答案,如果这被接受,那么最好的解决方案是手动计算数据使用量.

解决方法

这是我最初的解决方案. API实际上是以多种方式打破的,包括旧的和新的,所以这只是一个解决方案,如果它们被修复就可以使用.

为您的应用获取统计信息很简单:

int uid = android.os.Process.myUid();
txBytesInitial = TrafficStats.getUidTxBytes(uid);
rxBytesInitial = TrafficStats.getUidRxBytes(uid);

因此,每次网络连接丢失(或应用程序关闭,或应用程序逻辑需要统计数据)时,应用程序数据使用中的增量将根据NetworkInfo.getType()添加到您的统计信息中.您需要维护最后检索以用于增量计算,并且这些需要存储在例如:当手机重新启动或任何方向错误时,SharedPreferences并重置(取决于设备,由于其他原因可以重置,然后重启).

有关这些API的一些附加说明,请参见this useful SO post(例如,它们不包括数据包开销,只包括有效负载).

相关文章

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在...
Android实现自定义带文字和图片的Button 在Android开发中经常...
Android 关于长按back键退出应用程序的实现最近在做一个Andr...
android自带的时间选择器只能精确到分,但是对于某些应用要求...