TrafficStats特定应用程序 - 特定网络接口

时间:2012-03-06 18:05:47

标签: android linux networking

我知道我可以使用以下trafficstats api方法来获取任何给定应用程序的所有网络接口发送和接收的字节数。但是我如何获得仅限移动设备的统计数据?这样我就可以分离移动和wifi数据。

  

getUidTxBytes(int uid)
  获取通过的发送字节数   这个UID的网络。

     

getUidRxBytes(int uid)
  获取通过的接收字节数   这个UID的网络。

似乎API缺少这样的东西。以及获得它的其他方式 getUidMobileRxBytes(int uid)

2 个答案:

答案 0 :(得分:1)

package com.formation.traficstates;

import android.app.Activity;
import android.app.AlertDialog;
import android.net.TrafficStats;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class TraficstatesActivity extends Activity {

    private Handler mHandler=new Handler();;

    private long mStartRX;





    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        mStartRX=TrafficStats.getTotalRxBytes();

        if (mStartRX == TrafficStats.UNSUPPORTED) {

            AlertDialog.Builder alert = new AlertDialog.Builder(this);

            alert.setTitle("Uh Oh!");

            alert.setMessage("Your device does not support traffic stat monitoring.");

            alert.show();

        } else {

            mHandler.postDelayed(mRunnable, 1000);

        }  
    }

    private final Runnable mRunnable = new Runnable() {

        public void run() {


        long rxBytes = TrafficStats.getTotalRxBytes()- mStartRX;

        TextView RX = (TextView)findViewById(R.id.textViewRX);

        RX.setText("\nbytes recreived :"+Long.toString(rxBytes));


        }

        };

}

答案 1 :(得分:0)

很抱歉,但您只能获取整个设备的每个接口统计信息,而不是每个UID。

您可以通过收集全接口,每UID统计信息和每个接口,整个设备统计信息来估算每个接口,每个UID统计信息,然后假设整个设备的接口比率为大约是该单个UID的比率。对于短时间跨度,这可能相当准确,因为设备只会定期切换接口。