如何知道设备是不是有数据连接?
Posted
技术标签:
【中文标题】如何知道设备是不是有数据连接?【英文标题】:How to know whether device has data connection?如何知道设备是否有数据连接? 【发布时间】:2012-12-01 18:13:21 【问题描述】:我正在尝试检测设备是否具有 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
,不上网时不显示toast。
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();
【问题讨论】:
【参考方案1】:假设您的循环返回正确的值,让我们取出本地布尔值,因为它们是不必要的:
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;
【讨论】:
【参考方案2】:试试这个来检查互联网连接是否可用:
private boolean isNetworkAvailable()
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
【讨论】:
【参考方案3】: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;
【讨论】:
【参考方案4】:你的逻辑是错误的:
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 () 为 false,您将永远无法到达 Toast。您应该按如下方式更改它:
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();
【讨论】:
以上是关于如何知道设备是不是有数据连接?的主要内容,如果未能解决你的问题,请参考以下文章