2010-05-07 19 views
9

¿Cómo puedo usar el servicio Android para hacer una devolución de llamada ping? Necesito abrir una página web haciendo clic en un botón, pero en el fondo, hago ping a otra url para recopilar estadísticas.Servicio de Android - Ping URL

Los fragmentos de código serán de gran ayuda

Gracias Chris

Respuesta

16

Creo que si lo que desea hacer ping a una dirección URL, puede utilizar este código:

try { 
    URL url = new URL("http://"+params[0]); 

    HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
    urlc.setRequestProperty("User-Agent", "Android Application:"+Z.APP_VERSION); 
    urlc.setRequestProperty("Connection", "close"); 
    urlc.setConnectTimeout(1000 * 30); // mTimeout is in seconds 
    urlc.connect(); 

    if (urlc.getResponseCode() == 200) { 
     Main.Log("getResponseCode == 200"); 
     return new Boolean(true); 
    } 
} catch (MalformedURLException e1) { 
    e1.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Y, si quieres para tener el equivalente a un ping, puede poner un System.currentTimeMillis() antes y después de la llamada, y calcular la diferencia.

esperanzas que ayuda

fragmento de código encuentran en here

+0

Esto ha estado trabajando muy bien para mí, excepto para Android 4 dispositivos en los que siempre falla. ¿Algunas ideas? – dee

+9

Necesita quitar la llamada de su hilo principal. Android 4 no exige llamadas de red en el hilo principal para evitar problemas de ANR. –

+2

Esto establecerá una conexión TCP con un apretón de manos completo de 3 vías. Así que el tiempo no es como un ping ('ICMP-echo -> ICMP-reply') –