TrafficStats特定应用程序特定的networking接口

我知道我可以使用下面的trafficstats API的方法来获取任何给定的应用程序的所有networking接口的字节发送和接收。 但是,我如何才能获得移动设备的统计信息? 这样我就可以分离手机和wifi数据。

getUidTxBytes(int uid)
获取此UID通过networking发送的字节数。

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

看起来像这样的东西从API中缺less。 和其他方式getUidMobileRxBytes(int uid)

Solutions Collecting From Web of "TrafficStats特定应用程序特定的networking接口"

对不起,您只能获得整个设备的每个接口统计信息,而不是每个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)); } }; }