2010-12-13 17 views
7

Estoy trabajando en una aplicación y está casi terminada, excepto una sola cosa: no sé cómo obtener la velocidad del enlace y colocarla en la barra de estado. Soy nuevo en Java, así que si alguien pudiera ayudarme, estaría muy agradecida. P.S. Perdón por mal inglés.¿Cómo obtener velocidad de enlace mediante programación?

+1

¿Qué se supone que es la velocidad de enlace? –

+0

¿te refieres a la velocidad de descarga del ancho de banda? o tal vez te refieres a una barra de progreso indeterminada? – Franco

+0

¿Desea saber qué tan rápido se puede descargar la conexión a Internet? ¿O qué tan rápido está descargando cosas ahora? O algo completamente diferente? –

Respuesta

34

Como sugieren las respuestas, su pregunta no es muy clara. Usted podría referirse a la velocidad de conexión de enlace de (es decir, hasta 54 Mbps con un buen acceso inalámbrico recepción de la señal o de hasta 7,2 Mbps con HSDPA a toda velocidad), que depende de:

  • La interfaz de red que está utilizando en un tiempo. Algunos teléfonos permiten el anclaje, lo que significa que puede tener activados tanto WiFi como Mobile Data Link (GPRS/3G/HSDPA) o el cambio automático (si su conexión Wifi cae, su teléfono cambiará automáticamente a la red móvil si está activado).
  • La velocidad de conexión se negoció a la vez. Dependiendo de la calidad de la señal/configuración de la red del operador (algunos tienen una velocidad máxima limitada)/contrato de datos móviles (la cuota de ancho de banda mensual excedida normalmente significa la velocidad predeterminada de GPRS).

En este caso me temo que no hay métodos estándar de Java API a lo sepa, pero la API de Android la funcionalidad necesaria:

  • Para la comprobación WiFi velocidad de enlace WifiInfo.getLinkSpeed()
  • Por Mobile Data Link Me temo que solo puede marcar TelefonyManager.getNetworkType() para determinar el tipo de enlace de datos móvil actual. Debería aproximarse a la velocidad real por tipo de enlace (es decir, para GPRS de hasta 128 kbps, para EDGE de hasta 236.8 kpbs, para 3G hasta 2 Mbps, para HSDPA de hasta 7.2 Mbps). Tenga en cuenta que esta es solo una aproximación. Tu podrías estar conectando usando HSDPA pero tu proveedor limitando la velocidad máxima a 2 Mbps.

En el otro caso de que usted se refiere la actual velocidad de enlace (Descargar Subir /) los datos esto sólo está disponible en un nivel alto, en realidad no la medición de la velocidad del enlace, pero la velocidad entre el teléfono y un servidor, que puede determinarse no solo por la velocidad de su enlace sino también por muchos otros factores (todos los enlaces entre su teléfono, un servidor, el servidor mismo, etc.). Puede medir "velocidad de nivel HTTP", lo que significa velocidad de datos HTTP (excluyendo el tráfico general para paquetes de datos), ya que normalmente solo se admiten conexiones HTTP en cada escenario (su proveedor podría ocultarlo detrás de un proxy que filtra todo pero HTTP tráfico).

Si está utilizando la API de 8 niveles, también se encuentra disponible una característica interesante llamada TrafficStats. Esto le permite conocer los paquetes enviados/recibidos en un nivel bajo intercambiado por su teléfono a través del enlace de datos móvil, que puede ofrecer solo la información que busca (use estas medidas con los tiempos transcurridos y puede medir fácilmente los datos usados ​​actuales/promedio) velocidad de enlace).

+0

Gracias por su respuesta rápida – 4yBAk

+0

¿Puede entrar en más detalles en términos de detección de velocidad de conexión 3G? Cuando genero TelefonyManager.getNetworkType(), devuelve "CONECTADO", no un tipo de telefonía específico. – worked

2

No se puede decir directamente. Debe preguntar al sistema operativo subyacente. Para OS X, puede analizar el resultado de "/ sbin/ifconfig" en el puerto de red apropiado.

1

También puede escribir la extensión usando JNI, y solicitar la velocidad de conexión con C. Es por si acaso si no desea analizar la salida de otra aplicación, pero tenga en cuenta que esta solución no es portátil.

Cuestiones relacionadas