在Android中检测Internet连接的问题

dee*_*epa 4 android

我使用Google地图创建了一个Android应用程序.现在我想检查互联网连接是否可用.我在谷歌搜索,最后我通过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" />   
Run Code Online (Sandbox Code Playgroud)

我写了我的在线Google地图代码,如果它返回true,则返回true和离线代码.

我的问题是它显示互联网连接即使不是.我哪里弄错了?

Mar*_*son 12

尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)