android应用流量统计小谈

    最近有一个项目需要对android设备上安装的应用进行流量统计,并且分离出每个应用通过wifi和手机网络分别用了多少流量。花了一些时间查阅资料和代码编写,终于完成了一个DEMO版本,最后做了一些封装,将这个功能组件化,以后需要这个功能只要把jar导进去就可以了。那么,对于这一个需求,我们应该怎么做呢?

    谈到流量统计,先给大家介绍篇入门文章http://keepcleargas.bitbucket.org/2013/10/12/android-App-Traffic.html,这篇文章详细阐述了在android文件系统中,关于安装应用的流量统计文件位置,以及如何看这个文件。另外,文章还介绍了单个应用的流量统计文件位置。这里,文章谈到了TrafficStats这个类。TrafficStats是android.net包下的一个工具类,里面有一些静态方法,可以用来获取应用的流量使用情况。值得注意的是,所有获得的值都是从开机到当前时刻的流量值,这一点很重要。因此,我们在做统计的是后,就需要用到数据库,在手机关机的时候,先把值持久化下来。接下来,我们重点看TrafficStats这个类的其中两个静态方法getUidRxBytes(int uid)和getUidTxBytes(int uid)。这两个方法分别获取相应uid所代表的应用的流量接收字节数和流量发送字节数。而,应用的uid我们可以通过应用的包名得到PackageInfo,在从PackageInfo中提取它的uid。我们只要将得到的rx和tx相加就得到应用使用的流量了。

    通过上面的方法,我们只能得到应用所使用的总流量。但是,如何分离出其中有多少是通过wifi使用的,多少是通过手机网络的呢?这里,我们需要借助android的广播机制。通过监听手机的wifi切换情况,当wifi从关闭状态切换到开启状态时,就开始统计wifi流量;当wifi从开启状态切换到关闭状态时,就结束wifi流量统计;另外,上面已经提到,我们用TrafficStats得到的流量值是用户开机到当前的流量统计值。因此,我们还需要另一个广播来监听用户手机的关机。

    看起来,原理很简单,但是里面有许多细节需要我们考虑:

  1. 用户安装了使用流量统计功能的应用之前,其他需要统计流量的应用已经有流量统计值了,我们是无法分离出之前这部分的wifi和手机网络流量值的。我们要将这部分去除。也就是说,从安装我们的功能应用是开始统计。

    最后贴一些我的组件下载地址:http://download.csdn.net/detail/hatah0126/6611873。由于我们的组件需要数据库来存储,因此还依赖了另一个jar:http://download.csdn.net/detail/hatah0126/6611911。使用时,把这两个jar放到libs目录下。另外,在eclipse的java Build Path->order and Export中,记得把他们勾上,新版的eclipse如果没勾的话会出问题。

    最最后一步,就是在我们项目的AndroidManifest.xml上做一些权限和广播的配置即可,将下面的代码贴到你的AndroidManifest.xml。

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>



<receiver android:name="cn.wth.trafic.receiver.DeviceShutDownReceiver">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.ACTION_SHUTDOWN"/>
            </intent-filter>
        </receiver>
        
        <receiver android:name="cn.wth.trafic.receiver.WifiStateReceiver">
            <intent-filter >
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
            </intent-filter>
        </receiver>



    OK,大功告成,文章写得不好,但均是原创,大神勿喷,初学者可参考借鉴。


转载于:https://my.oschina.net/u/990810/blog/178988

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值