2016-06-20 2 views
0

기기에 인터넷이 있는지 여부를 확인하려면 다음 코드 라인을 참조하십시오.무선 네트워크를 통한 요청과 android의 모바일 네트워크

boolean hasInternet = false; 
HttpURLConnection urlc = null; 
try { 
    urlc = (HttpURLConnection) 
      (new URL("http://clients3.google.com/generate_204") 
      .openConnection()); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
urlc.setRequestProperty("User-Agent", "Android"); 
urlc.setRequestProperty("Connection", "close"); 
urlc.setConnectTimeout(1500); 
urlc.connect(); 
hasInternet = (urlc.getResponseCode() == 204 && 
       urlc.getContentLength() == 0); 

무선 인터넷 연결을 사용할 때 모든 것이 좋으며 hasInternet 값이 true입니다. 하지만 모바일 네트워크 공급자를 사용할 때 hasInternet 값은 항상 false이지만 모바일 브라우저의 모든 사이트를 열 수 있습니다. 무슨 문제가있는 것 같습니까?

+0

이 대해 connecttimeout 늘려보십시오. 5 초 또는 10 초로 설정해보십시오. –

+0

@RajenRaiyarela 10 초를 시도했지만 아무 것도 얻지 못했습니다! – Sina

답변

0

사용이 방법은 모바일 장치에서 사용할 수 isNetwork를 확인합니다 : 당신의 모바일 네트워크 무선 네트워크 다음 느린 할 수 있으므로

public static boolean isNetwork(Context context) { 

     ConnectivityManager cm = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } 
+1

이것은 확실히 좋은 해결책이지만 때로는 장치가 wifi에 연결되어 있지만 wifi 라우터에 인터넷 연결 문제가있어 일부 URL에 액세스하여 검사를하는 것이 좋습니다. 나는 거의 내 프로젝트 에서이 문제를 경험하고 그것을 바탕으로 내가 코멘트. –

+0

나는 그 코드 앞에이 코드가있다. 이것은 내가 생각하는 요점이 아니다. httpclient apache를 통해 http 요청을 게시하려고합니다. 그것은 동일합니다. 무선을 사용하는 것은 문제가 없지만 모바일 네트워크 공급자를 사용하면 요청을 보내지 않습니다. 어쩌면 내 모바일 네트워크 제공 업체가 일부 프록시를 사용하거나 금지 된 제품 일 수 있습니다! – Sina

+0

아주 좋은 지적 @RajenRaiyarela는 그것에 대해 생각 해보지 않았으므로, 지금부터 당신의 개념을 사용할 것입니다. –

관련 문제