微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Android中检测到Internet连接时出现问题

如何解决在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 举报,一经查实,本站将立刻删除。