2012-04-11 1 views
1

Android 기기가 인터넷에 연결되어 있는지 어떻게 확인합니까? 현재, I는 아래의 코드를 사용하고하기 :장치가 라우터에 연결된 경우 인터넷 연결 가용성을 확인하는 방법은 무엇입니까?

ConnectivityManager connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
boolean isConnectedToNetwork = (networkInfo != null && networkInfo.isConnected()); 

그러나, 전술 한 코드의 문제점은 단지 검사 장치가 네트워크에 연결되어있는 경우이다. 인터넷 연결이 가능한지 여부는 확인하지 않습니다. 예를 들어 기기가 인터넷에 액세스 할 수없는 라우터에 연결되어있는 경우 기술적으로 라우터를 통해 네트워크에 연결되어 있기 때문에 기기는 isConnectedToNetwork에 대해 계속 true를 반환합니다. 라우터가 인터넷에 연결되어 있지 않다는 것입니다.

내가 본 한 가지 제안은 다운 될 확률이 매우 낮은 웹 사이트에 연결하는 것입니다. 예를 들면 www.google.com입니다. 그러나 이것은 이것이 적절한 해결책이 아니라고 생각합니다. 첫째, 사용자가 GPRS를 사용 중이며 인터넷 사용량이 KB 당 요금 인 경우 추가 요금이 추가로 부과됩니다. 둘째, 제 3 자 웹 사이트를 사용하는 것이 윤리적이라고 생각하지 않습니다. 이것이 인터넷 연결을 확인하는 유일한 방법입니까 아니면 다른 해결책을 제안 할 수 있습니까? 동의없이 Google에 연결하는 것이 정말 괜찮습니까? 기기가 인터넷에 연결되어 있는지 어떻게 확인할 수 있습니까?

답변

1

사용 ConnectivityManager.TYPE_WIFI

ConnectivityManager connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    boolean isConnectedToNetwork = (networkInfo != null && networkInfo.isConnected()); 
인터넷이 작동할지 여부를이 기능을 확인하기 위해
+1

안녕하십니까. 답장을 보내 주셔서 감사합니다. 그러나 위는 기기가 Wi-Fi 인터페이스에 연결되어 있는지 확인하는 것입니다. 인터넷 연결이 가능한지 여부는 확인하지 않습니다. – Arci

0
public boolean checkInternetConnection() { 

    ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (conMgr.getActiveNetworkInfo() != null 
      && conMgr.getActiveNetworkInfo().isAvailable() 
      && conMgr.getActiveNetworkInfo().isConnected()) { 
     Log.d("Internet Connection Present",""); 
     isFound=true; 
    } else { 
     Log.d("Internet Connection Not Present",""); 
     isFound= false; 
    } 
    return isFound; 
} 
+1

답장을 보내 주셔서 감사합니다. 그러나 isConnected()는 장치가 네트워크에 연결되어 있는지 확인합니다. 장치가 인터넷에 연결되어 있는지 또는 연결되어 있는지 확인할 수 없습니다. 예를 들어, 라우터에 연결되어있는 경우 isConnected()는 인터넷 연결이 있는지 여부에 관계없이 항상 true를 반환합니다. – Arci

+0

만약 당신이 gprs를 통해 인터넷을 사용하고 있다면 PhoneStateListner와의 연결을 확인할 수있는 더 나은 정확성을 위해 사이트를 ping 할 수있는 스레드를 만들 수 있습니다. – Sandeep

+0

@Arci isConnected()는 장치가 라우터에 연결되어 있지만 문서에 따르면 : "네트워크 연결이 존재하는지 여부를 나타냅니다. 연결을 설정하고 데이터를 전달할 수 있습니다. 데이터 트랜잭션을 수행하기 전에 항상 이것을 호출하십시오." –

2
public boolean isOnline(Context context) { 
    try { 
     ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (cm.getActiveNetworkInfo().isConnectedOrConnecting()) { 
      URL url = new URL("http://www.ripansekhon.blogspot.com"); 
      HttpURLConnection urlc = (HttpURLConnection) url .openConnection(); 
      urlc.setRequestProperty("User-Agent", "test"); 
      urlc.setRequestProperty("Connection", "close"); 
      urlc.setConnectTimeout(1000); // mTimeout is in seconds 
      urlc.connect(); 
      if (urlc.getResponseCode() == 200) { 
       return true; 
      } else { 
       return false; 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

체크, 웹 사이트를 여는 의미 여부를 희망이 코드는 인터넷이 원하는 모든 사람들에게 도움이 네트워크 외에도 작동하는지 여부는