您的位置:首页 > 移动开发

Android中如何统计每一个APP的流量(3g)使用?

2016-11-06 17:05 375 查看
翻译自http://stackoverflow.com/questions/12613402/android-statistic-3g-traffic-for-each-app-how

想要统计每一个APP的流量使用,我现在使用的是Android TrafficStats

然后我可以得到类似与以下的结果:

Youtube 50.30 MBytes

Facebook 21.39 MBytes

Google Play 103.38 MBytes

(and more…)

我所知道的是,“Android TrafficStat”只是一个指向c文件的指针。(或者是.so?)

但得到的结果是wifi&3g混合的结果,有没有得到没有wifi的流量信息的方法呢?

回答

我有一个方法。。。。

首先创建一个class,继承BroadcasrReceiver

清单文件

<receiver android:name=".core.CoreReceiver" android:enabled="true" android:exported="false">
<intent-filter>
<action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" />
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>


代码

/**
* @author me
*/
public class CoreReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (Constants.phone == null) {
// Receive [network] event
Constants.phone=new PhoneListen(context);
TelephonyManager telephony=(TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(Const


创建一个phone stats listener

public class PhoneListen extends PhoneStateListener {
private Context context;
public PhoneListen(Context c) {
context=c;
}
@Override
public void onDataConnectionStateChanged(int state) {
switch(state) {
case TelephonyManager.DATA_DISCONNECTED:// 3G
//3G has been turned OFF
break;
case TelephonyManager.DATA_CONNECTING:// 3G
//3G is connecting
break;
case TelephonyManager.DATA_CONNECTED:// 3G
//3G has turned ON
break;
}
}
}


最后,我的逻辑是:

1 连接数据库

2 通过TrafficStats 统计流量数据(每一分钟),当且仅当3g开的时候才统计

3 如果3g关了,停止统计

4 如果3g&wifi都开着,停止统计

据我所知,如果3g&wifi都开着,只跑wifi流量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 3g 流量 app Traffic