TrafficStatsUtil

package com.android.demo.lileidemo.utils;

import android.Manifest;
import android.app.usage.NetworkStats;
import android.app.usage.NetworkStatsManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.os.RemoteException;
import android.support.v4.app.ActivityCompat;
import android.telephony.TelephonyManager;

import com.android.demo.lileidemo.MyApplication;
import com.android.demo.lileidemo.constant.AppConstants;

/**
* date: 03/19/2020.
* author: lilei.
*/
public class TrafficStatsUtil {
private static final String TAG = AppConstants.APP_TAG + "TrafficStatsUtil ";
private static volatile TrafficStatsUtil mInstance;
private static final boolean DEBUG = false;
private Context mContext;

/**
* get Instance.
*
* @return instance.
*/
public static TrafficStatsUtil getInstance() {
if (mInstance == null) {
synchronized (TrafficStatsUtil.class) {
if (mInstance == null) {
mInstance = new TrafficStatsUtil();
}
}
}
return mInstance;
}

public TrafficStatsUtil() {
mContext = MyApplication.getAppContext();
}

/**
* getTotalWifiTraffic from startTimeMillis to endTimeMillis.
*
* @param startTimeMillis Start time milliseconds.
* @param endTimeMillis End time milliseconds.
* @return milliseconds.
*/
public long getTotalWifiTraffic(long startTimeMillis, long endTimeMillis) {
if (null == mContext) {
return -1;
}
NetworkStatsManager networkStatsManager = (NetworkStatsManager) mContext.getSystemService(
Context.NETWORK_STATS_SERVICE);
NetworkStats.Bucket bucket = null;
try {
bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI,
"", startTimeMillis, endTimeMillis);
} catch (RemoteException e) {
e.printStackTrace();
}
long summaryRx = bucket.getRxBytes();
long summaryTx = bucket.getTxBytes();
long summaryTotal = summaryRx + summaryTx;
if (DEBUG) {
LogUtil.d(TAG + "getTotalWifiTraffic() summaryTotal: " + summaryTotal + " summaryRx:"
+ summaryRx + " summaryTx:" + summaryTx);
}
return summaryTotal;
}

/**
* Get App Wifi Traffic for packageName from startTimeMillis to endTimeMillis.
*
* @param packageName app name.
* @param startTimeMillis Start time milliseconds.
* @param endTimeMillis End time milliseconds.
* @return milliseconds.
*/
public long getAppWifiTraffic(String packageName, long startTimeMillis, long endTimeMillis) {
if (null == mContext) {
return -1;
}
int uid = ActivityUtil.getUidByPackageName(mContext, packageName);

NetworkStats summaryStats = null;
long summaryRx = 0;
long summaryTx = 0;
NetworkStats.Bucket summaryBucket = new NetworkStats.Bucket();
long summaryTotal = 0;
NetworkStatsManager networkStatsManager = (NetworkStatsManager) mContext.getSystemService(
Context.NETWORK_STATS_SERVICE);
try {
summaryStats = networkStatsManager.querySummary(ConnectivityManager.TYPE_WIFI,
null, startTimeMillis, endTimeMillis);
} catch (RemoteException e) {
e.printStackTrace();
}
do {
summaryStats.getNextBucket(summaryBucket);
int summaryUid = summaryBucket.getUid();
if (uid == summaryUid) {
summaryRx += summaryBucket.getRxBytes();
summaryTx += summaryBucket.getTxBytes();
if (DEBUG) {
LogUtil.d(TAG + "getAppWifiTraffic() 11 uid:" + summaryUid + " rx:"
+ summaryBucket.getRxBytes() + " tx:" + summaryBucket.getTxBytes());
}
}

} while (summaryStats.hasNextBucket());

summaryTotal = summaryRx + summaryTx;
if (DEBUG) {
LogUtil.d(TAG + "getAppWifiTraffic() 22 packageName:" + packageName + " summaryTotal:" + summaryTotal + " summaryRx:"
+ summaryRx + " summaryTx:" + summaryTx);
}
return summaryTotal;
}

/**
* getTotalMobileTraffic from startTimeMillis to endTimeMillis.
*
* @param startTimeMillis Start time milliseconds.
* @param endTimeMillis End time milliseconds.
* @return milliseconds.
*/
public long getTotalMobileTraffic(long startTimeMillis, long endTimeMillis) {
if (null == mContext) {
return -1;
}
//get subscriberId
TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
LogUtil.d(TAG + "getTotalMobileTraffic() no Permission for READ_PHONE_STATE");
return -1;
}
String subscriberId = tm.getSubscriberId();

NetworkStatsManager networkStatsManager = (NetworkStatsManager) mContext.getSystemService(
Context.NETWORK_STATS_SERVICE);
NetworkStats.Bucket bucket = null;
try {
bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE,
subscriberId, startTimeMillis, endTimeMillis);
} catch (RemoteException e) {
e.printStackTrace();
}
long summaryRx = bucket.getRxBytes();
long summaryTx = bucket.getTxBytes();
long summaryTotal = summaryRx + summaryTx;
if (DEBUG) {
LogUtil.d(TAG + "getTotalMobileTraffic() summaryTotal: " + summaryTotal + " summaryRx:"
+ summaryRx + " summaryTx:" + summaryTx);
}
return summaryTotal;
}

/**
* Get App Mobile Traffic for packageName from startTimeMillis to endTimeMillis.
*
* @param packageName app name.
* @param startTimeMillis Start time milliseconds.
* @param endTimeMillis End time milliseconds.
* @return milliseconds.
*/
public long getAppMobileTraffic(String packageName, long startTimeMillis, long endTimeMillis) {
int uid = ActivityUtil.getUidByPackageName(mContext, packageName);

//get subscriberId
TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
LogUtil.d(TAG + "getAppMobileTraffic() no Permission for READ_PHONE_STATE");
return -1;
}
String subscriberId = tm.getSubscriberId();
NetworkStats summaryStats = null;
long summaryRx = 0;
long summaryTx = 0;
NetworkStats.Bucket summaryBucket = new NetworkStats.Bucket();
long summaryTotal = 0;
NetworkStatsManager networkStatsManager = (NetworkStatsManager) mContext.getSystemService(
Context.NETWORK_STATS_SERVICE);
try {
summaryStats = networkStatsManager.querySummary(ConnectivityManager.TYPE_MOBILE,
subscriberId, startTimeMillis, endTimeMillis);
} catch (RemoteException e) {
e.printStackTrace();
}
do {
summaryStats.getNextBucket(summaryBucket);
int summaryUid = summaryBucket.getUid();
if (uid == summaryUid) {
summaryRx += summaryBucket.getRxBytes();
summaryTx += summaryBucket.getTxBytes();
if (DEBUG) {
LogUtil.d(TAG + "getAppMobileTraffic() 11 uid:" + summaryUid + " rx:"
+ summaryBucket.getRxBytes() + " tx:" + summaryBucket.getTxBytes());
}
}
} while (summaryStats.hasNextBucket());
summaryTotal = summaryRx + summaryTx;
if (DEBUG) {
LogUtil.d(TAG + "getAppMobileTraffic() 22 packageName:" + packageName + " summaryTotal:"
+ summaryTotal + " summaryRx:" + summaryRx + " summaryTx:" + summaryTx);
}

return summaryTotal;
}
}
原文地址:https://www.cnblogs.com/adamli/p/13139835.html