0

今天我在安卓设备上测试我的应用程序时发现了一件奇怪的事情。在我的设备中,我启用了 WIFI 连接,但由于一些内部问题,互联网连接不可用,我的应用程序没有执行,重新启动设备后它工作正常。那么如何处理这种情况。

[在我的应用程序中,我验证了 WIFI 和移动网络]

4

2 回答 2

1

我在工作中遇到了一个奇怪的网络问题。我会通过 wifi 将手机连接到我们的网络,它会连接到网络,状态将是“连接到网络名称”。但是在我的手机连接到 Wifi 大约 10 分钟后。当我检查电话状态时,它显示“正在使用 [网络名称] 进行身份验证。这个问题导致了一段时间的调试,因为即使它说它正在“身份验证”,我仍然可以在我的手机上访问我的 gmail/facebook 和网站。但是当我尝试类似于 scorpio 的连接方法时,它会返回未连接到互联网。这是我的:

 /**
 * Method to see if device has any access to the Internet. 
 * @return boolean true if connected, otherwise false.
 */
public boolean isConnectedToInternet()
{
    try{
        ConnectivityManager cm = (ConnectivityManager) getSystemService
                                                    (Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();

        if (netInfo != null && netInfo.isConnected())
        {
            //Network is available but check if we can get access from the network.
            URL url = new URL("http://www.Google.com/");
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(2000); // Timeout 2 seconds.
            urlc.connect();

            if (urlc.getResponseCode() == 200)  //Successful response.
            {
                return true;
            } 
            else 
            {
                 Toast.makeText(this, "No connection to internet.", Toast.LENGTH_LONG).show();
                 Log.d("NO INTERNET", "NO INTERNET");
                return false;
            }
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    Toast.makeText(this, "No connection to internet.", Toast.LENGTH_LONG).show();
    return false;
}

但是,当电话说它​​在此处验证此行时将返回 null。

NetworkInfo netInfo = cm.getActiveNetworkInfo();

因此,就像我在进行身份验证时所说的那样,我仍然可以通过电话访问网络,并且诸如 facebook/gmail 之类的应用程序仍然可以工作,但我的应用程序或我的一些使用上述类似方法的同事却没有。显然,当我弄清楚为什么会出现这种情况时,我就明白了为什么。只是让我好奇 facebook/gmail 等应用程序是如何测试互联网连接的。所以我想知道我是否应该采取一种简单的方法来做到这一点:

URL url = new URL("http://www.Google.com/");
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(2000); // Timeout 2 seconds.
            urlc.connect();

            if (urlc.getResponseCode() == 200)  //Successful response.
            {
                return true;
            } 
            else 
            {
                 Toast.makeText(this, "No connection to internet.", Toast.LENGTH_LONG).show();
                 Log.d("NO INTERNET", "NO INTERNET");
                return false;
            }

无论如何,发布的问题相当模糊,很难说出你所说的内部问题是什么以及如何解决它。只是看起来类似于fustration。

于 2011-07-07T10:28:05.183 回答
0

尝试这个,

protected boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager)     getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
    return true;
} else {
    return false;
}
}

或者

public boolean isOnline() {
 ConnectivityManager cm = (ConnectivityManager)     getSystemService(Context.CONNECTIVITY_SERVICE);
 return cm.getActiveNetworkInfo().isConnectedOrConnecting();

}
于 2011-07-07T10:03:00.297 回答