Android--获取使用的总流量和每个App的上传、下载的流量
获得每个App的上传、下载的流量。
思路就是获取到我们手机上的所有app,再获得app里面使用的权限,如果app有网络权限,就显示出来。
代码很简单,代码里面也有比较详细的注释,下面直接上代码
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.fanlei.mycontentproviderdemo.TrafficActivity"> <TextView
android:id="@+id/show_liuliang"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> <Button
android:id="@+id/btn_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取App流量"/> <ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"> </ListView>
</LinearLayout>
主函数:
package com.example.fanlei.mycontentproviderdemo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.TrafficStats;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class TrafficActivity extends ActionBarActivity { private TextView show_liuliang;//显示流量
private Button btn_scan;
private ListView listView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_traffic_activity); show_liuliang = (TextView) findViewById(R.id.show_liuliang);
listView = (ListView) findViewById(R.id.listView);
btn_scan = (Button) findViewById(R.id.btn_scan); long mrb = TrafficStats.getMobileRxBytes(); //手机接收的字节数,非WiFi状态 long mtb = TrafficStats.getMobileTxBytes(); //手机发送的字节数,非WiFi状态 long tMrb = TrafficStats.getTotalRxBytes(); //全部接收的字节数 long tMtb = TrafficStats.getTotalTxBytes(); //全部发送的字节数 StringBuilder sb = new StringBuilder();
sb.append("非WiFi总接受:").append(byteToMB(mrb));
sb.append("非WiFi总发送:").append(byteToMB(mtb));
sb.append("全部接收:").append(byteToMB(tMrb));
sb.append("全部发送:").append(byteToMB(tMtb)); show_liuliang.setText(sb.toString());//显示 btn_scan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PackageManager pm = getPackageManager(); //拿到包管理者
//拿到包的信息 PackageInfo是系统的一个类
List<PackageInfo> info = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES
|PackageManager.GET_PERMISSIONS);
List<Map<String,String>> appInfo = new ArrayList<>();//用于存放App的名称,上传和下载的字节
/**
* 通过看它有没有网络权限权限
*/
for (PackageInfo temp:info){
String permissions[] = temp.requestedPermissions; //拿到该包的权限
if (permissions!= null && permissions.length > 0){ //如果有权限
for (String p : permissions){
if (p.equals("android.permission.INTERNET")){//是否有网络权限
String appName = temp.applicationInfo.loadLabel(pm).toString(); //App名称
long appMrb = TrafficStats.getUidRxBytes(temp.applicationInfo.uid);//App接收的字节
long appMtb = TrafficStats.getUidTxBytes(temp.applicationInfo.uid);//App发送的字节
String str = appName + "下载:"+byteToMB(appMrb)+"上传:"+byteToMB(appMtb);
Map<String,String> map = new HashMap<>();
map.put("info",str);
appInfo.add(map);
}
}
}
} SimpleAdapter simpleAdapter = new SimpleAdapter(getBaseContext(),
appInfo,
android.R.layout.simple_list_item_1,
new String[]{"info"},
new int[]{android.R.id.text1}); listView.setAdapter(simpleAdapter);//设置Adapter
}
});
}
//将字节数转化为MB
private String byteToMB(long size){
long kb = 1024;
long mb = kb*1024;
long gb = mb*1024;
if (size >= gb){
return String.format("%.1f GB",(float)size/gb);
}else if (size >= mb){
float f = (float) size/mb;
return String.format(f > 100 ?"%.0f MB":"%.1f MB",f);
}else if (size > kb){
float f = (float) size / kb;
return String.format(f>100?"%.0f KB":"%.1f KB",f);
}else {
return String.format("%d B",size);
}
} }
虚拟机效果图,由于我的虚拟机不能上网,故没有流量的使用

Android--获取使用的总流量和每个App的上传、下载的流量的更多相关文章
- Android开发中使用七牛云存储进行图片上传下载
Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...
- Android Studio如何配置CURL指令一键打包apk上传至蒲公英
Android Studio如何配置CURL指令一键打包apk上传至蒲公英 第一步:在所需要打包的模块build.gradle文件中加入如下代码: android{ buildTypes { //配置 ...
- RxHttp 完美适配Android 10/11 上传/下载/进度监听
1.前言 随着Android 11的正式发布,适配Android 10/11 分区存储就更加的迫切了,因为Android 11开始,将强制开启分区存储,我们就无法再以绝对路径的方式去读写非沙盒目录下的 ...
- 【转】Android 服务器之SFTP服务器上传下载功能
原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件(二)
Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件第二版 上次粗略的写了相同功能的代码,这次整理修复了之前的一些BUG,结构也大量修改 ...
- 【转】Android 服务器之SFTP服务器上传下载功能 -- 不错
原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...
- Android连接socket服务器上传下载多个文件
android连接socket服务器上传下载多个文件1.socket服务端SocketServer.java public class SocketServer { ;// 端口号,必须与客户端一致 ...
- Android+Spring Boot 选择+上传+下载文件
2021.02.03更新 1 概述 前端Android,上传与下载文件,使用OkHttp处理请求,后端使用Spring Boot,处理Android发送来的上传与下载请求.这个其实不难,就是特别多奇奇 ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
随机推荐
- JDK源码分析之集合03LinkedList
一.前言 LinkedList是双向列表,实现方式是使用链表的方式保存元素:除了第一个和最后一个元素外,每一个节点都包含一个指向前一个和指向后一个节点的指针和元素的值.其特点是插入删除效率高,而随机访 ...
- only one is important
今天早上还是去了图书馆,看了一早上的hello world(intel opencl),清楚了程序编写的基本流程,但是,仍和以前一样,貌似看懂了,其实什么也不会,没有发现什么问题.中午,回来取了我的笔 ...
- 第4章 awk编程
1 awk编程模型 2 awk用法 调用awk有三种方法(与sed类似): 在Shell命令行输入命令调用awk,格式为: awk [-F 域分隔符] 'awk程序段' 输入文件 将awk ...
- 简单jQuery实现选项框中列表项的选择
这段代码非常的简单,仅仅作为自己的一个小小的记录! ok,先上一个简单的图例,效果如下(注意:这只是一个简单的例子,不过可以根据这个简单的例子,变化出更为复杂的效果)! 代码也非常的简单,如下所示(注 ...
- ASP.NET运行机制原理 ---浏览器与IIS的交互过程 自己学习 网上查了下别人写的总结的很好 就转过来了 和自己写的还好里嘻嘻
一.浏览器和服务器的交互原理 (一).浏览器和服务器交互的简单描述: 1.通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问 ...
- ASP.NET MVC 开源项目学习之ProDinner (一)
首先在github上面将ProDinner项目通过 Git Bash 克隆到本地,接下来我们开始分析这个项目吧~ 系统采用.Net 4.5, Asp.net Mvc 5,VS2012,Sql serv ...
- cacti快速安装
一.cacti概述 1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户. ...
- 如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,自动生成mysql的触发代码。
<?php $dbname = 'test';//数据库 $tab1 = 'user'; //执行的表 $tab2 = 'user_bak'; //被触发的表 $conn = mysql_con ...
- hbase日常运维管用命令,region管理
1 Hbase日常运维 1.1 监控Hbase运行状况 1.1.1 操作系统 1.1.1.1 IO 群集网络IO,磁盘IO,HDFS IO IO越大说明文件读 ...
- Mybatis SQL语句查询
MyBatis中使用in查询时的注意事项 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach一共有三种类型,分别为List,[](array),Map三种. ...