2012-12-01 41 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

你的逻辑是错误的以下内容:

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

如果haveNetworkConnection()是假的,你永远也没有机会敬酒。你应该改变它如下:

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(); 
      } 
相关问题