Android6.0及以上设备查看流量使用情况
AndroidNetworkStatsManager大约 2587 字所需权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>
初始化NetworkStatsManager
mNetworkStatsManager = (NetworkStatsManager) context.getSystemService(NETWORK_STATS_SERVICE);
// 获取subscriberId
TelephonyManager tm = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
try {
mSubId = tm.getSubscriberId();
} catch (Exception e) {
mSubId = "";
e.printStackTrace();
}
- 获取月初到目前为止设备的Mobile流量统计
public long getMobileFlow() {
long mobileFlow = 0;
try {
NetworkStats.Bucket bucket;
bucket = mNetworkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, mSubId, getTimesMonthMorning(), System.currentTimeMillis());
mobileFlow = bucket.getRxBytes() + bucket.getTxBytes();
} catch (Exception e) {
e.printStackTrace();
}
return mobileFlow;
}
- 获取单个应用月初到目前为止设备的WiFi流量统计
private long getWiFiFlowByUid(int uid){
NetworkStats summaryStats;
NetworkStats.Bucket summaryBucket = new NetworkStats.Bucket();
long summaryTotal = 0;
try {
summaryStats = mNetworkStatsManager.queryDetailsForUid(
ConnectivityManager.TYPE_WIFI, mSubId, 0, System.currentTimeMillis(),uid);
do {
summaryStats.getNextBucket(summaryBucket);
summaryTotal += summaryBucket.getRxBytes() + summaryBucket.getTxBytes();
} while (summaryStats.hasNextBucket());
} catch (Exception e) {
e.printStackTrace();
}
return summaryTotal;
}
- 获取单个应用月初到目前为止设备的Mobile流量统计
private long getMobileFlowByUid(int uid){
NetworkStats summaryStats;
NetworkStats.Bucket summaryBucket = new NetworkStats.Bucket();
long summaryTotal = 0;
try {
summaryStats = mNetworkStatsManager.queryDetailsForUid(
ConnectivityManager.TYPE_MOBILE, mSubId, 0, System.currentTimeMillis(),uid);
do {
summaryStats.getNextBucket(summaryBucket);
summaryTotal += summaryBucket.getRxBytes() + summaryBucket.getTxBytes();
} while (summaryStats.hasNextBucket());
} catch (Exception e) {
e.printStackTrace();
}
return summaryTotal;
}
- 获取月初的毫秒值
private long getTimesMonthMorning() {
Calendar cal = Calendar.getInstance();
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
return cal.getTimeInMillis();
}
阅读 1660 · 发布于 2019-04-13
————        END        ————
扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批
- 算法每日一题20190620:整数反转阅读 424
- 走进Rust:配置IDEA开发环境阅读 697
- Java推断资源的Content-Type阅读 237
- 编译时提示virtual memory exhausted: Cannot allocate memory阅读 1234
- 走进RUst:泛型阅读 303
- OpenResty使用ngx.timer.at完成异步日志记录阅读 1266
- Elasticsearch全文搜索query->match阅读 452
- Linux 查看cron定时任务执行日志阅读 1497
- Android Gradle去除重复依赖阅读 1171
- MongoDB备份、还原与导出、导入阅读 1222