【问题标题】:how can i determine internet speed in my android application我如何确定我的 android 应用程序中的互联网速度
【发布时间】:2016-08-08 12:57:56
【问题描述】:

在我的应用程序中,我希望当我单击一个按钮时它会显示确切的互联网速度。 我已阅读有关此问题的所有答案,这些答案已在此链接 determining internet speed in androidCalculating Internet Speed in androidInternet Speed in android programming 等中提出。 但我并没有完全找到我的答案。我用过这个:

WifiInfo.getLinkSpeed()

但它显示最大速度。我也使用这个代码:

交通统计

但它对我不起作用。我需要显示我的网络速度(即 100 kbps)。我怎样才能做到这一点? 请帮帮我。

【问题讨论】:

    标签: android mobile wifi monitor wifimanager


    【解决方案1】:

    要确定 Android 应用程序的互联网速度,首先您需要从在线服务器下载一些文件。 为什么我们需要下载文件?检查平均互联网下载速度。

    为此,您需要编写这样的代码

     private class InternetSpeedTest
            extends AsyncTask<String, Void, String> {
    
        long startTime;
        long endTime;
        private long takenTime;
    
        @Override
        protected String doInBackground(String... paramVarArgs) {
    
            startTime = System.currentTimeMillis();
            Log.d(TAG, "doInBackground: StartTime" + startTime);
    
            Bitmap bmp = null;
            try {
                URL ulrn = new URL(paramVarArgs[0]);
                HttpURLConnection con = (HttpURLConnection) ulrn.openConnection();
                InputStream is = con.getInputStream();
                bmp = BitmapFactory.decodeStream(is);
    
                Bitmap bitmap = bmp;
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 99, stream);
                byte[] imageInByte = stream.toByteArray();
                long lengthbmp = imageInByte.length;
    
                if (null != bmp) {
                    endTime = System.currentTimeMillis();
                    Log.d(TAG, "doInBackground: EndTIme" + endTime);
                    return lengthbmp + "";
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
    
        }
    
        protected void onPostExecute(String result) {
    
            if (result != null) {
                long dataSize = Integer.parseInt(result) / 1024;
                takenTime = endTime - startTime;
                double s = (double) takenTime / 1000;
                double speed = dataSize / s;
                Log.d(TAG, "onPostExecute: " + "" + new DecimalFormat("##.##").format(speed) + "kb/second");
            }
        }
    

    在这段代码中会从Here下载一张图片

    在doInBackground中你会在这里计算下载完成后图片的大小

    Bitmap bitmap = bmp;
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 99, stream);
            byte[] imageInByte = stream.toByteArray();
            long lengthbmp = imageInByte.length
    

    最后一件事是通过从开始时间减去endtime来计算takenTime,速度是(size/takenTime)

    希望对你有用

    【讨论】:

      【解决方案2】:

      WifiInfo.getLinkSpeed 将为您提供当前 wifi 网络的最大速度。您的实际 wifi 速度将低于此值,具体取决于您到接入点的距离、障碍物、干扰……这是您在 wifi 网络中的速度。如果您访问网络内的设备,则传输速度将是您的速度与其他设备速度之间的最小值。

      如果您访问互联网,那么您的 wifi 网络已连接到互联网,您的速度将取决于所使用的技术(ADSL、有线、4G、卫星......)和您的互联网提供商的容量(谁在连接的另一端)。这两个值通常随时间变化,因为它们取决于使用模式(并发用户数、网络容量……)

      另外请记住,当连接到互联网时,您会向另一台设备发出请求(大多数情况下是向服务器发出请求)。您获得的传输速度将是您的速度与您正在联系的服务器的速度之间的最小值。

      总而言之,有太多未知因素无法预测您的网速。

      但是您始终可以计算它,只需发出一些请求,测量您获得了多少千字节(或兆字节),计算花费了多长时间,然后除以另一个。这将是该特定连接的当前速度。

      如果您想要更稳定/可信的值,您应该多次重复此操作,并使用平均值。这就是速度测试器(www.speedtest.net、testmy.net、...)服务所做的。

      【讨论】:

      • 非常感谢。但是,你能告诉我如何提出请求并测量我得到多少 kbytes,如何计算时间?我怎样才能做到这一点?你能帮我写一些代码吗?
      【解决方案3】:

      检查互联网连接质量和流量的质量。这个库可能会对你有所帮助..

      Facebook - Network Connection Class

      Network Connection Class 是一个 Android 库,可让您了解当前用户的互联网连接质量。连接被分为几个“连接类”,使其易于开发。图书馆通过侦听您的应用程序完成的现有互联网流量并在用户的连接质量发生变化时通知您来做到这一点。然后,开发人员可以使用此连接类信息并调整应用程序的行为(请求质量较低的图像或视频、限制提前输入等)。

      【讨论】:

      • 谢谢亲爱的,但你能帮我如何使用这个库吗?如果可能的话,请用代码告诉我。
      • 请访问 github 页面,按照该页面上的说明进行操作。要包含库 - 您需要在您的 gradle 依赖项中将此行添加到您的 app.compile 'com.facebook.network.connectionclass:connectionclass:1.0.1'.
      猜你喜欢
      • 1970-01-01
      • 2012-03-18
      • 2011-02-19
      • 2014-10-18
      • 1970-01-01
      • 2020-08-04
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多