2012-01-09 1 views
0

기기에서 고정 IP를 사용하는 동안 인터넷 연결을 감지하는 데 약간의 문제가 있습니다. 고정 IP를 설정하지 않고 연결하는 동안 사용 가능한 연결을 감지하는 내 기능이 제대로 작동합니다. 하지만 정적 IP를 설정하면 함수가 true를 반환합니다. Wifi 또는 3G에 연결 되었기 때문에 함수는 true를 반환하지만 인터넷에 연결되어 있지 않아 내 응용 프로그램이 충돌 할 수 있습니다. 어떤 아이디어를 고정 IP를 사용하는 동안 그 문제를 해결하는 방법? 여기 내가 사용하고 무엇을 :고정 IP를 사용하는 동안 Android Checkign 네트워크 연결

public boolean chkNetworkStatus(Context context) { 
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity == null) { 
     Toast.makeText(context, "No available connection!", Toast.LENGTH_LONG); 
    } else { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 
+0

붙여 넣은 코드가 맞으면 여기에 문제가있을 수 있습니다. – idiottiger

+0

코드에 없습니다. 정적 IP를 사용하지 않을 때는 모든 것이 잘 작동하지만 정적을 사용하는 옵션을 설정하면 장치에서 웹 사이트를 열 수도 없지만 Wifi 또는 3G에 연결되어 있기 때문에 네트워크 검사가 사실로 통과합니다. 하지만 나는 인터넷에 접속할 수 없다. 그것이 충돌하는 이유입니다. –

+0

정보는 [I] .getState() == NetworkInfo.State.CONNECTED 만 연결되어있는 '네트워크를 확인, 단, web'에 공공 부울는, isConnected를 연결할 수 있습니다 식별 할 수없는() 는 이후 : API 레벨 1 를 나타냅니다 네트워크 연결이 존재하고 연결을 설정하고 데이터를 전달할 수 있는지 여부 – idiottiger

답변

0

당신이 당신의 상황에서 사용할 수있는 것입니다. wifi/3g에 연결되어 있고 웹 페이지를로드 할 수 있으면이 함수는 true을 반환합니다.

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

    public static boolean chkNetworkStatus(Context context) { 
    boolean result = false; 
    new Thread() { 
     @Override 
     public void run() { 


      for(int i=0;i<3;i++){ 
      HttpGet requestForTest = new HttpGet("http://m.google.com"); 
      try { 
        new DefaultHttpClient().execute(requestForTest); 
        responded = true; 
       } catch (Exception e) { 
        responded = false; 
       } 
      } 
     } 
    }.start(); 
    boolean isOnline = isOnline(context); 
    if(responded && isOnline){ 
     result = true; 
    } else { 
     result = false; 
    } 

    Log.e("","responded : "+responded); 
    return result; 
} 
0

이 방법을 사용 .... 내가 당신을 위해 helpfull 바랍니다.

공공 부울 checkNetworkConnection (컨텍스트 컨텍스트) {여기

ConnectivityManager cm = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 

    if (activeNetwork != null) { 
     return activeNetwork.isConnectedOrConnecting(); 
    } 

    NetworkInfo wifiNetwork = cm 
      .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    if (wifiNetwork != null) { 
     return wifiNetwork.isConnectedOrConnecting(); 
    } 

    NetworkInfo mobileNetwork = cm 
      .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
    if (mobileNetwork != null) { 
     return mobileNetwork.isConnectedOrConnecting(); 
    } 

    NetworkInfo otherNetwork = cm.getActiveNetworkInfo(); 
    if (otherNetwork != null) { 
     return otherNetwork.isConnectedOrConnecting(); 
    } 
    return false; 
}