我使用以下方法检查设备是否可以访问互联网
在此代码中,我尝试ping /请求www.google.com
try
{
HttpGet request = new HttpGet(new URI(WEB_SIT_TO_PING));
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 500);
HttpConnectionParams.setSoTimeout(httpParameters, 500);
HttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpResponse response = httpClient.execute(request);
int status = response.getStatusLine().getStatusCode();
if (status == HttpStatus.SC_OK)
{
result = true;
}
}
catch(Exception e)
{
e.printStackTrace();
result = false;
}
上面的代码有效但是,当我的活动启动时,它会显示一个空白黑屏1-2秒,然后显示活动的主屏幕。
我正在活动的onCreate
进行此检查
还有另外一个做这个检查的原因。
更新:
我不想检查网络是否已连接,我想检查设备是否可以访问Internet。可能是设备具有网络连接但该网络连接没有Internet访问的情况。
感谢。
答案 0 :(得分:2)
您可以检查设备是否足够轻松地连接到网络,或者您是否真的想要查看设备是否可以专门连接到Google,而不会在ASync任务中延迟包装该代码。
有关ASync任务的信息:http://developer.android.com/reference/android/os/AsyncTask.html
AsyncTask允许您在与UI线程分开的线程上运行代码。因此,目前它冻结了1-2秒。
编辑我没有提供用于检查无线连接的代码,因为其他人已经提供了其他选择,但我确实认为解释为什么你要解除冻结是非常重要的。
答案 1 :(得分:2)
您可以使用以下代码来确定设备是否可以访问互联网:
boolean connected = false;
ConnectivityManager connectivitymanager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkinfo = connectivitymanager.getActiveNetworkInfo();
connected = ((networkinfo != null) && (networkinfo.isAvailable()) && (networkinfo
.isConnected()));
Log.v("Message ", connected + "");
if (connected == false) {
Toast.makeText(currentActivity.this,
"No Internet Connection detected on device",
Toast.LENGTH_LONG).show();
finish();
} else {
//
}
答案 2 :(得分:2)
在我自己的应用程序中,我使用以下代码:
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
这将检查手机的当前网络状态,以查看设备是否具有网络连接,并根据此返回布尔变量。
如果您想使用这段代码,则必须将以下权限添加到清单文件中:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
答案 3 :(得分:1)
您面临的1-2秒冻结是由于您在onCreate方法中进行的http请求。在onCreate方法完成执行之前,屏幕的UI不会显示。如果您仍想在onCreate方法中创建http请求,则可以在单独的线程中创建它。可以根据您的需要制作异步任务或新线程。
永远记住,永远不要在android的UI线程中执行任务。在这里,你在UI线程中发出了一个http请求。截至目前你只有1-2秒的延迟,如果你的Android设备连接到WIFI网络尝试同样的事情,但互联网很慢,那么你的http请求可能需要5秒才能完成,如果你尝试在这5秒内进行任何UI操作,您的应用程序将给出“APPLICATION NOT RESPONDING”对话框。
答案 4 :(得分:0)
我假设以下代码将有助于检查网络连接:
/*
*@return boolean return true if the application can access the internet
*/
public boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}