Android TrafficStats特定于应用程序的网络接口

Android TrafficStats特定于应用程序的网络接口,android,linux,networking,Android,Linux,Networking,我知道我可以使用trafficstats api的以下方法来获取针对任何给定应用程序的所有网络接口发送和接收的字节。但是我怎样才能得到手机的数据呢?这样我就可以分离移动和wifi数据 getUidTxBytes(整数uid) 获取通过服务器发送的字节数 此UID的网络 getUidRxBytes(内部uid) 获取通过服务器接收的字节数 此UID的网络 API中似乎缺少类似的内容。还有其他的方法 getUidMobileRxBytes(int-uid)很抱歉,您只能获取整个设备的每个接口的统计信

我知道我可以使用trafficstats api的以下方法来获取针对任何给定应用程序的所有网络接口发送和接收的字节。但是我怎样才能得到手机的数据呢?这样我就可以分离移动和wifi数据

getUidTxBytes(整数uid)
获取通过服务器发送的字节数 此UID的网络

getUidRxBytes(内部uid)
获取通过服务器接收的字节数 此UID的网络

API中似乎缺少类似的内容。还有其他的方法
getUidMobileRxBytes(int-uid)

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

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

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));


        }

        };

}