-
效果
-
NetSeepView.java
package com.wxq.me.netspeeddemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.net.TrafficStats;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.widget.TextView;
/**
* Created by wxq on 2016/11/12.
*/
public class NetSeepView extends TextView {
private SpeedType type = SpeedType.UP;//默认上传
private long total_tdata = TrafficStats.getTotalTxBytes();
private long total_rdata = TrafficStats.getTotalRxBytes();
private int count = 1;
private String seep;//网速
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.arg1 > (1024 * 1024)) {
seep = msg.arg1 / 1024 / 1024 + "Mb/s";
} else if (msg.arg1 > 1024) {
seep = msg.arg1 / 1024 + "Kb/s";
} else {
seep = msg.arg1 + "b/s";
}
invalidate();
}
};
/**
* 定义线程周期性的获取网速
*/
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
mHandler.postDelayed(mRunnable, count * 1000);
Message msg = mHandler.obtainMessage();
msg.arg1 = getNetSpeed();
mHandler.sendMessage(msg);
}
};
public NetSeepView(Context context) {
super(context);
init();
}
private void init() {
setGravity(Gravity.CENTER);
setPadding(0, 0, 0, 0);
setTextColor(Color.BLACK);
setTextSize(36);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
setText(seep);
}
private int getNetSpeed() {
long traffic_data;
if (type == SpeedType.UP) {//上传
traffic_data = TrafficStats.getTotalTxBytes() - total_tdata;//总的发送的字节数
total_tdata = TrafficStats.getTotalTxBytes();
} else {//下载
traffic_data = TrafficStats.getTotalRxBytes() - total_rdata;//总的接受字节数
total_rdata = TrafficStats.getTotalRxBytes();
}
return (int) (traffic_data / count);
}
public void start() {
mHandler.postDelayed(mRunnable, 0);
}
public void start(SpeedType type) {
setType(type);
mHandler.postDelayed(mRunnable, 0);
}
public void stop() {
mHandler.removeCallbacks(mRunnable);
}
/**
* 设置显示上传或下载速度
*
* @param type
*/
public void setType(SpeedType type) {
this.type = type;
}
public enum SpeedType {
UP, DOWN
}
}
- MainActivity.java
package com.wxq.me.netspeeddemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
NetSeepView seep;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
seep = new NetSeepView(this);
setContentView(seep);
seep.start();
}
@Override
protected void onStop() {
super.onStop();
seep.stop();
}
}
2.3开始android就提供来这个类的API,这样我们就可以方便的用他来实现统计手机流量来。这个类其实也很简单,贴上他的几个方法,大家一看就知道怎么用了。
static long getMobileRxBytes() //获取通过Mobile连接收到的字节总数,不包含WiFi
static long getMobileRxPackets() //获取Mobile连接收到的数据包总数
static long getMobileTxBytes() //Mobile发送的总字节数
static long getMobileTxPackets() //Mobile发送的总数据包数
static long getTotalRxBytes() //获取总的接受字节数,包含Mobile和WiFi等
static long getTotalRxPackets() //总的接受数据包数,包含Mobile和WiFi等
static long getTotalTxBytes() //总的发送字节数,包含Mobile和WiFi等
static long getTotalTxPackets() //发送的总数据包数,包含Mobile和WiFi等
static long getUidRxBytes(int uid) //获取某个网络UID的接受字节数,某一个进程的总接收量
static long getUidTxBytes(int uid) //获取某个网络UID的发送字节数,某一个进程的总发送量