今天我在安卓设备上测试我的应用程序时发现了一件奇怪的事情。在我的设备中,我启用了 WIFI 连接,但由于一些内部问题,互联网连接不可用,我的应用程序没有执行,重新启动设备后它工作正常。那么如何处理这种情况。
[在我的应用程序中,我验证了 WIFI 和移动网络]
今天我在安卓设备上测试我的应用程序时发现了一件奇怪的事情。在我的设备中,我启用了 WIFI 连接,但由于一些内部问题,互联网连接不可用,我的应用程序没有执行,重新启动设备后它工作正常。那么如何处理这种情况。
[在我的应用程序中,我验证了 WIFI 和移动网络]
我在工作中遇到了一个奇怪的网络问题。我会通过 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。
尝试这个,
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();
}