2010-05-07 36 views
9

Tôi làm cách nào để sử dụng Dịch vụ Android để thực hiện gọi lại ping? Tôi cần phải mở một trang web trên một nút bấm, nhưng trong nền, đi ping một url khác để thu thập số liệu thống kê.Dịch vụ Android - Ping URL

Đoạn mã sẽ rất hữu ích

Cảm ơn Chris

Trả lời

16

Tôi nghĩ rằng nếu bạn chỉ muốn ping một địa chỉ, bạn có thể sử dụng mã này:

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(); 
} 

Và, nếu bạn muốn để có tương đương với một ping, bạn có thể đặt một System.currentTimeMillis() trước và sau cuộc gọi, và tính toán sự khác biệt.

hy vọng rằng sẽ giúp đoạn

đang tìm thấy trong here

+0

này đã làm việc tốt cho tôi trừ dành cho Android 4 thiết bị mà nó luôn luôn thất bại. Ý tưởng nào? – dee

+9

Bạn cần phải chuyển cuộc gọi khỏi chuỗi chính của mình. Android 4 thực thi không có cuộc gọi mạng nào trên luồng chính để ngăn chặn các vấn đề ANR. –

+2

Điều này sẽ thiết lập kết nối TCP với bắt tay 3 chiều đầy đủ. Vì vậy, thời gian là không có gì giống như một ping ('ICMP-echo -> ICMP-reply') –

Các vấn đề liên quan