2012-01-13 155 views
1

我使用下面的方法来检查设备是否具有接入互联网。
在这段代码中我试图让平/请求www.google.com如何检查Android设备是否可以访问互联网?

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访问。

谢谢。

回答

2

您可以检查设备连接到网络上很轻松了,或者如果你真的想了解该设备是否可以专门连接到谷歌不延迟换行代码在异步任务。在异步任务

信息:http://developer.android.com/reference/android/os/AsyncTask.html

一个的AsyncTask将允许您在一个单独的线程比UI线程运行的代码。目前它正在冻结1 - 2秒。

编辑我没有如其他人已经提供了其他的替代品,但我确实想解释为什么你experencing你是冻结是很重要的检查无线连接提供的代码。

+0

感谢您的回复 – User7723337 2012-01-13 14:38:12

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 { 
      // 
     } 
+4

您可以连接到无线网络,而无需访问互联网。所以这个解决方案并不是最好的 – 2012-01-13 10:45:42

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" /> 
+0

这就像一个魅力。这次真是万分感谢。 – praneetloke 2013-08-16 05:04:41

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; 
     } 
1

您正面临的1-2秒冻结是由于您在onCreate方法中发出的http请求。直到你的onCreate方法执行完毕,屏幕的用户界面才会显示出来。如果你仍然想在onCreate方法中创建一个http请求,那么你可以在一个单独的线程中创建它。可以做一个异步任务或一个新线程,以适合您的需求。

一定要记住,永远不会做时采取任务的android的UI线程。这里你在UI线程中发出一个http请求。截至目前,您只有1-2秒的滞后时间,如果您的Android设备连接到WIFI网络时尝试同样的操作,但互联网速度非常慢,那么您的http请求可能需要5秒钟才能完成,如果您尝试在5秒钟内执行任何UI操作,您的应用程序将提供“应用程序无响应”对话框。

+0

感谢您的解释,我已经移动HTTP请求部分在一个单独的线程,并从那里我发送一个消息在UI线程根据网络状态更新UI。 – User7723337 2012-01-14 10:41:19

相关问题