2012-12-01 5 views
0

기기에 wifi 또는 3g 연결이 있는지 검색하려고합니다. 연결이있는 경우 MapView이 표시되지만 둘 중 하나도 연결되어 있지 않으면 내 조건문에 문제가 있습니다. 여기장치에 데이터 연결이 있는지 여부를 확인하는 방법?

내가 네트워크 연결을 확인하는 방법은 다음과 같습니다 여기

private boolean haveNetworkConnection() { 
    boolean haveConnectedWifi = false; 
    boolean haveConnectedMobile = false; 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
    for (NetworkInfo ni : netInfo) { 
     if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
      if (ni.isConnected()) 
       haveConnectedWifi = true; 
     if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
      if (ni.isConnected()) 
       haveConnectedMobile = true; 
    } 
    return haveConnectedWifi || haveConnectedMobile; 
} 

내가 메소드를 호출하는 코드입니다. 인터넷에 액세스 할 수있는 경우 MapView이 표시되지만 인터넷에 액세스 할 수없는 경우에는 표시되지 않습니다.

if (haveNetworkConnection()) { 
    if (loc != null && !loc.equals("")) { 
     new GeocoderTask().execute(loc); 
    } else { 
     Toast.makeText(this, "Internet Connection is Required to view this map", Toast.LENGTH_LONG).show(); 
    } 
} 

답변

0

는 루프가 올바른 값을 반환 가정, 그들은 불필요한 이후의 로컬 논리 값을 보자 :

private boolean haveNetworkConnection() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
    for (NetworkInfo ni : netInfo) { 
     if (ni.getTypeName().equalsIgnoreCase("WIFI") && ni.isConnected()) 
      return true; 
     if (ni.getTypeName().equalsIgnoreCase("MOBILE") && ni.isConnected()) 
      return true; 
    } 
    return false; 
} 

루프가 올바르지 않으면 코드에 the documentation's method을 포함시킬 수 있습니다.

private boolean haveNetworkConnection() { 
    ConnectivityManager cm = 
      (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if(activeNetwork != null) 
     return activeNetwork.isConnectedOrConnecting(); 
    return false; 
} 
0

것은 인터넷 연결을 사용할 수 있는지 여부를 확인하려면이 시도 :

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager 
     = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 

    return activeNetworkInfo != null; 
} 
0
private boolean haveNetworkConnection() { 
    //boolean haveConnectedWifi = false; 
    //boolean haveConnectedMobile = false; 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
    for (NetworkInfo ni : netInfo) { 
     if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
      if (ni.isConnected()) 
       return true; 
     if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
      if (ni.isConnected()) 
       return true; 
    } 
    return false; 
} 
0

당신의 논리는 다음과 같은 잘못입니다 : haveNetworkConnection()가 false의 경우는 토스트에 못할거야

if (haveNetworkConnection()) { 
     if (loc != null && !loc.equals("")) { 
      new GeocoderTask().execute(loc); 
     } else { 
      Toast.makeText(this, "Internet Connection is Required to view this map", Toast.LENGTH_LONG).show(); 
     } 
    } 

. 다음과 같이 변경해야합니다.

if (haveNetworkConnection()) { 
      if (loc != null && !loc.equals("")) { 
       new GeocoderTask().execute(loc); 
      } 
     } 
else { 
       Toast.makeText(this, "Internet Connection is Required to view this map", Toast.LENGTH_LONG).show(); 
      } 
관련 문제