android應用流量統計小談

    最近有一個項目須要對android設備上安裝的應用進行流量統計,而且分離出每一個應用經過wifi和手機網絡分別用了多少流量。花了一些時間查閱資料和代碼編寫,終於完成了一個DEMO版本,最後作了一些封裝,將這個功能組件化,之後須要這個功能只要把jar導進去就能夠了。那麼,對於這一個需求,咱們應該怎麼作呢? html

    談到流量統計,先給你們介紹篇入門文章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相加就獲得應用使用的流量了。 java

    經過上面的方法,咱們只能獲得應用所使用的總流量。可是,如何分離出其中有多少是經過wifi使用的,多少是經過手機網絡的呢?這裏,咱們須要藉助android的廣播機制。經過監聽手機的wifi切換狀況,當wifi從關閉狀態切換到開啓狀態時,就開始統計wifi流量;當wifi從開啓狀態切換到關閉狀態時,就結束wifi流量統計;另外,上面已經提到,咱們用TrafficStats獲得的流量值是用戶開機到當前的流量統計值。所以,咱們還須要另外一個廣播來監聽用戶手機的關機。 android

    看起來,原理很簡單,可是裏面有許多細節須要咱們考慮: 數據庫

  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。 eclipse

<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,大功告成,文章寫得很差,但均是原創,大神勿噴,初學者可參考借鑑。
相關文章
相關標籤/搜索