• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android 获取当前网速质量调整网络请求

Android 获取当前网速质量调整网络请求

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 获取当前网速,android 测网速,android 获取实时网速,android 获取网速,android 显示网速等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android 获取当前网速质量调整网络请求


在开发中,有时候常常需要根据用户当前的网速来做一些操作,比如图片的加载,当网速非常好的时候,比如连接的是wifi,我们就会下载高分辨率的图片,反之,当用户使用的是2g网时,我们则给他下载低分辨率的小图,从而节省用户流量。

而Facebook其实已经给我们提供了这么一个库,详见network-connection-class。

使用其实超级简单,先加入依赖

compile 'com.facebook.network.connectionclass:connectionclass:1.0.1'

在该库中,我们使用的主要是ConnectionClassManager这个类,这个类中有几个主要的方法。

getCurrentBandwidthQuality() 获得当前网速的质量,是一个枚举类型。
public enum ConnectionQuality {
  /**
   * Bandwidth under 150 kbps.
   */
  POOR,
  /**
   * Bandwidth between 150 and 550 kbps.
   */
  MODERATE,
  /**
   * Bandwidth between 550 and 2000 kbps.
   */
  GOOD,
  /**
   * EXCELLENT - Bandwidth over 2000 kbps.
   */
  EXCELLENT,
  /**
   * Placeholder for unknown bandwidth. This is the initial value and will stay at this value
   * if a bandwidth cannot be accurately found.
   */
  UNKNOWN
}
getDownloadKBitsPerSecond() 获得每秒的下载速度

此外,我们可以获得网络质量发生改变时的通知,比如从POOR变成了GOOD,我们只要注册监听器即可,这是一个观察者模式。

private ConnectionChangedListener listener = new ConnectionChangedListener();

private class ConnectionChangedListener implements
        ConnectionClassManager.ConnectionClassStateChangeListener {
    @Override
    public void onBandwidthStateChange(ConnectionQuality bandwidthState) {
        Log.e("onBandwidthStateChange", bandwidthState.toString());
    }
}

我们在Activity的onResume中注册监听器,在onPause中取消注册

    @Override
    protected void onResume() {
        super.onResume();
        ConnectionClassManager.getInstance().register(listener);
    }

    @Override
    protected void onPause() {
        super.onPause();
        ConnectionClassManager.getInstance().remove(listener);
    }

之后,在网络请求之前,我们需要调用开始采样的方法

 DeviceBandwidthSampler.getInstance().startSampling();

网络请求完成后,结束采样

DeviceBandwidthSampler.getInstance().stopSampling();

假设我们使用的是OkHttp

OkHttpClient client = new OkHttpClient();
                Request.Builder builder = new Request.Builder();
                Request request = builder.url("http://www.baidu.com").build();


                DeviceBandwidthSampler.getInstance().startSampling();
                client.newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        DeviceBandwidthSampler.getInstance().stopSampling();
                        Log.e("TAG","onFailure:"+e);
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        DeviceBandwidthSampler.getInstance().stopSampling();
                        Log.e("TAG","onResponse:"+response);
                        final ConnectionQuality connectionQuality = ConnectionClassManager.getInstance().getCurrentBandwidthQuality();
                        final double downloadKBitsPerSecond = ConnectionClassManager.getInstance().getDownloadKBitsPerSecond();
                        Log.e("TAG","connectionQuality:"+connectionQuality+" downloadKBitsPerSecond:"+downloadKBitsPerSecond+" kb/s");

                        tv.post(new Runnable() {
                            @Override
                            public void run() {
                                tv.setText("connectionQuality:"+connectionQuality+"\n"+"downloadKBitsPerSecond:"+downloadKBitsPerSecond+" kb/s");
                            }
                        });
                    }
                });

最终的效果如下图所示

这里写图片描述

但是该库只能获得下载速度,上传的速度无法获得,使用的时候注意一下即可。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android 获取当前网速质量调整网络请求

相关文章

  • 2017-05-26【转】adb.exe,start-server' failed,adbserverfailed
  • 2017-05-26分析google的multidex库,googlemultidex库
  • 2017-05-26Android中Action Bar的使用
  • 2017-05-26粗暴的解释Android与蓝牙Ble之间的通信,android蓝牙ble
  • 2017-05-26Android通知栏沉浸式/透明化完整解决方案,root不完整解决方法
  • 2017-05-26Android群英传笔记系列二view的绘制(一),android群英
  • 2017-05-26安卓第一天笔记,安卓第一天
  • 2017-05-26Android 手机卫士--是否有密码区分对话框类型,android卫士
  • 2017-05-26Android中通过反射获取资源Id,android获取资源id
  • 2017-05-26Android 框架启动流程

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android几种Tab的实现方法
    • Android逆向之旅---解析编译之后的Resource.arsc文件格式
    • udp connect 总结
    • Android(Java)控制GPIO的方法及耗时分析,androidgpio
    • 从视频中每X秒创建一个缩略图
    • Android SDK 镜像,androidsdk镜像
    • achartengine/MPAndroidChart——图表实现之Java
    • Android ViewPager使用详解
    • 安卓6.0(棉花糖)新特性汇总,安卓6.0
    • Android V7包学习笔记更新中.....

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有