Android网速实时显示

  • 效果
    这里写图片描述

  • 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的发送字节数,某一个进程的总发送量

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值