我如何确定我的android应用程序中的互联网速度

e.h*_*did 5 mobile android monitor wifi wifimanager

在我的应用程序中,我希望当我单击按钮时它可以向我显示确切的互联网速度。我读过关于这个问题已经被问到这个链路上的所有答案确定Android的上网速度计算上网速度在android系统上网速度在机器人编程等。但是我没有完全找到答案。我用这个:

WifiInfo.getLinkSpeed()

但显示最大速度。我也使用此代码:

流量统计

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

Mar*_*tin 5

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

为此,您需要这样的代码

 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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

在此代码中,将从此处下载图片

在doInBackground中,您将在此处完成下载后计算图像的大小

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

最后一件事是通过减去结束时间形式的开始时间来计算TakeTime,速度为(size / takenTime)

我希望这个对你有用


小智 0

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

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

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

总而言之,有太多未知的因素来预测你的网速。

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

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