try{
final NetworkStats stats = mNetworkStatsManager.querySummary(ConnectivityManager.TYPE_MOBILE, mTelephonyManager.getSubscriberId(), startTime, endTime);
long totalUsage = getTotalUsage(stats,uid);
Slog.d(TAG, packageName + " app used data = " + totalUsage);
return totalUsage > APP_USAGE_CRITICAL_DATA;
}catch (Exception e){
Slog.e(TAG, "Exception querying network detail.", e);
return false;
}
}
private static long getTotalUsage(NetworkStats stats,int uid) {
long bytes = 0L;
if (stats != null) {
final NetworkStats.Bucket bucket = new NetworkStats.Bucket();
while (stats.hasNextBucket() && stats.getNextBucket(bucket)) {
if (bucket.getUid() == uid) {
bytes += bucket.getRxBytes() + bucket.getTxBytes();
}
}
stats.close();
}else {
Slog.d(TAG, "stats = null");
}
return bytes;
}
该代码段用于查询并计算特定应用在指定时间范围内的移动网络数据使用量。它通过ConnectivityManager获取网络统计信息,然后遍历NetworkStats中的每个Bucket,累加对应UID的接收(RxBytes)和发送(TxBytes)字节数。如果总使用量超过预设阈值,则返回true表示使用量达到临界值,否则返回false。在处理中,还捕获并记录了可能出现的异常。

1万+

被折叠的 条评论
为什么被折叠?



