«

android 获取网络速度

时间:2024-3-2 17:19     作者:韩俊     分类: Android


显示手机或者应用的实时网速,很多应用都有这块的内容,那么如何获取手机或者应用的实时网速呢?

获取网速的原理是一段时间只能的数据总量除以这段时间,这就是网速了。

获取某一时刻手机的数据总量:

       // 得到整个手机的流量值
        return TrafficStats.getUidRxBytes(getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0
                : (TrafficStats.getTotalRxBytes() / 1024);// 转为KB


获取某一时刻应用的数据总量:

       // 得到当前应用的流量值
        return TrafficStats.getUidRxBytes(getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0 : (TrafficStats
                .getUidRxBytes(getApplicationInfo().uid) / 1024);// 转为KB

现在知道如何获取某一时刻的数据总量,我们就能轻而易举的得到网速了:

    private long lastTotalRxBytes = 0; // 最后缓存的字节数
    private long lastTimeStamp = 0; // 当前缓存时间
    // 循环查询当前网速
    private Runnable runnable = new Runnable() {

        @Override
        public void run() {
            long nowTotalRxBytes = getTotalRxBytes(); // 获取当前数据总量
            long nowTimeStamp = System.currentTimeMillis(); // 当前时间
            // kb/s
            long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp == lastTimeStamp ? nowTimeStamp : nowTimeStamp
                    - lastTimeStamp));// 毫秒转换
            tv.setText(String.valueOf(speed) + "kb/s");
            lastTimeStamp = nowTimeStamp;
            lastTotalRxBytes = nowTotalRxBytes;
            handler.postDelayed(runnable, 1000);// 每1秒执行一次runnable.
        }
    };

    private long getTotalRxBytes() {
        // 得到整个手机的流量值
        return TrafficStats.getUidRxBytes(getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0
                : (TrafficStats.getTotalRxBytes() / 1024);// 转为KB
        // // 得到当前应用的流量值
        // return TrafficStats.getUidRxBytes(getApplicationInfo().uid) ==
        // TrafficStats.UNSUPPORTED ? 0 : (TrafficStats
        // .getUidRxBytes(getApplicationInfo().uid) / 1024);// 转为KB

    }


demo下载

标签: android

热门推荐