Cómo puedo determinar la velocidad de Internet en mi aplicación Android
En mi aplicación quiero que cuando hago clic en un botón que me muestran la velocidad exacta de Internet. Había leído toda la respuesta sobre esta pregunta que se ha pedido ya en estos acoplamientos que determinan la velocidad del Internet en androide , calculando velocidad del Internet en androide , velocidad del Internet en la programación androide y así sucesivamente. Pero no encontré mi respuesta exactamente. Utilicé esto:
WifiInfo.getLinkSpeed ()
- WifiManager.is5GHzBandSupported () mentir?
- ¿Cómo puedo configurar ProxySettings y ProxyProperties en la conexión Wi-Fi de Android usando Java?
- ¿Hay alguna manera de ser notificado cuando las redes wifi SSIS conocidas entran o salen del rango?
- Android Lollipop - Hotspot WiFi setWifiApEnabled () obtener InvocationTargetException
- Android Wi-Fi Direct leer la intensidad de la señal rssi
Pero muestra la velocidad máxima. Y también uso los códigos de esto:
TrafficStats
Pero no funcionó para mí. Necesito mostrar la velocidad de mi red (es decir, 100 kbps). ¿Cómo puedo hacer esto? Por favor, ayúdame.
- ¿Qué intervalo debo usar entre cada exploración WiFi en Android?
- Falta el método en android.net.wifi.WifiManager
- WifiManager devuelve BSSID 00: 00: 00: 00: 00: 00
- Obtener la dirección MAC del dispositivo: cuando el wifi está desactivado
- Cómo obtener la fuerza de la señal de WiFi WiFi conectado?
- Establecer IP estática y pasarela programáticamente en Android 6.x (Marshmallow)
- Cómo conectarse a un elemento Wifi ScanResult
- ¿Puedo usar WiFi para transferir datos / mensajes entre dos teléfonos Android, no conectados a un enrutador?
Para determinar la velocidad de Internet en una aplicación de Android primero necesita descargar algún archivo de onlineserver. ¿Por qué necesitamos descargar el archivo? Para comprobar el promedio de velocidad de descarga de Internet.
Para eso necesitas codificar así
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"); } }
En este código se descargará una imagen de aquí
En doInBackground se calcula el tamaño de la imagen después de la descarga completada aquí
Bitmap bitmap = bmp; ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 99, stream); byte[] imageInByte = stream.toByteArray(); long lengthbmp = imageInByte.length
Y lo último es calcular tomados por tiempo restando la hora de inicio del formulario de tiempo de fin y la velocidad es (size / takenTime)
Espero que te funcione
WifiInfo.getLinkSpeed le dará la velocidad máxima de su red wifi actual. Su velocidad wifi real será inferior a este valor, dependiendo de lo lejos que esté del punto de acceso, los obstáculos, las interferencias, … Esta es su velocidad dentro de su red wifi. Si accede a un dispositivo dentro de su red, la transferencia será el mínimo entre su velocidad y la velocidad del otro dispositivo.
Si accede a Internet, su red wifi está conectada a Internet y su velocidad dependerá de la tecnología utilizada (ADSL, cable, 4G, satélite, …) y de la capacidad de su proveedor de Internet (que está al otro lado De su conexión). Ambos valores suelen cambiar en el tiempo, ya que dependen de los patrones de uso (número de usuarios simultáneos, la capacidad de la red, ..)
También tenga en cuenta que, cuando está conectado a Internet, realiza peticiones a otro dispositivo (la mayoría de las veces a un servidor). La velocidad de transferencia que obtendrá será el mínimo entre su velocidad y la del servidor al que está contactando.
Con todo, hay demasiados elementos desconocidos para predecir su velocidad de Internet.
Sin embargo, siempre se puede calcular, simplemente hacer algunas peticiones, medir cuántos Kbytes (o Megabytes) obtendrá, calcular cuánto tiempo ha tomado y dividir uno por el otro. Esta será la velocidad actual para esa conexión en particular.
Si desea valores más estables / confiables, debe repetir esta operación varias veces y usar el promedio. Esto es lo que hacen los probadores de velocidad (www.speedtest.net, testmy.net, …).
Para comprobar la calidad de la conexión a Internet de calidad y tráfico. Esta biblioteca puede ayudarte.
Facebook – Clase de conexión de red
Clase de conexión de red es una biblioteca de Android que le permite averiguar la calidad de la conexión de Internet del usuario actual. La conexión se clasifica en varias "clases de conexión" que hacen que sea fácil de desarrollar en contra. La biblioteca lo hace escuchando el tráfico de Internet existente realizado por su aplicación y notificándole cuándo cambia la calidad de conexión del usuario. Los desarrolladores pueden utilizar esta información de la clase de conexión y ajustar el comportamiento de la aplicación (solicitar imágenes de baja calidad o video, tipo de acelerador por delante, etc.).
- Nombres de pantalla personalizados de Google Analytics en Easy Tracker
- Cómo instalar simplemente apk en el dispositivo en Android Studio