如何解决在Android中检测到Internet连接时出现问题
| 我已经使用Google Maps创建了一个Android应用程序。现在,我想检查互联网连接是否可用。我在Google中搜索,最后通过Stackoverflow获得了解决方案: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;
}
<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />
如果在线Google地图代码返回true,则编写了我的在线代码;如果离线,则返回false。
我的问题是它显示即使没有互联网连接也可用。我在哪里弄错了?
解决方法
尝试使用
NetworkInfo ni = cm.getActiveNetworkInfo();
代替NetworkInfo ni = cm.getAllNetworkInfo();
。任何时候都只能有一个活动的数据网络,因为Android会使用最好的可用数据网络,然后关闭其他活动网络以节省电池。
另外,我倾向于使用ni.isConnectedOrConnecting();
而不是ni.isConnected();
,因为它可以更好地捕获过渡状态。
我还使用ni.getType() == ConnectivityManager.TYPE_WIFI
而不是ni.getTypeName().equalsIgnoreCase(\"WIFI\")
,因为比较两个int
值比比较两个字符串要有效得多。
以下代码对我有用:
boolean HaveConnectedWifi = false;
boolean HaveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if ( ni != null )
{
if (ni.getType() == ConnectivityManager.TYPE_WIFI)
if (ni.isConnectedOrConnecting())
HaveConnectedWifi = true;
if (ni.getType() == ConnectivityManager.TYPE_MOBILE)
if (ni.isConnectedOrConnecting())
HaveConnectedMobile = true;
}
, /**
* Checking whether net connection is available or not.
*
* @param nContext
* @return true if net connection is avaible otherwise false
*/
public static boolean isNetworkAvailable(Context nContext) {
boolean isNetAvailable = false;
if (nContext != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) nContext
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (mConnectivityManager != null) {
boolean mobileNetwork = false;
boolean wifiNetwork = false;
boolean mobileNetworkConnecetd = false;
boolean wifiNetworkConnecetd = false;
NetworkInfo mobileInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mobileInfo != null)
mobileNetwork = mobileInfo.isAvailable();
if (wifiInfo != null)
wifiNetwork = wifiInfo.isAvailable();
if (wifiNetwork == true || mobileNetwork == true) {
if (mobileInfo != null)
mobileNetworkConnecetd = mobileInfo
.isConnectedOrConnecting();
wifiNetworkConnecetd = wifiInfo.isConnectedOrConnecting();
}
isNetAvailable = (mobileNetworkConnecetd || wifiNetworkConnecetd);
}
}
return isNetAvailable;
}
还要在清单权限中添加以下标记:
<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。