如何检查android设备是否可以访问互联网?

如何检查android设备是否可以访问互联网?,android,Android,我正在使用以下方法检查设备是否可以访问internet。 在这段代码中,我试图ping/request到www.google.com try { HttpGet request = new HttpGet(new URI(WEB_SIT_TO_PING)); HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParamete

我正在使用以下方法检查设备是否可以访问internet。
在这段代码中,我试图ping/request到
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访问权限


谢谢。

您可以检查该设备是否足够容易地连接到网络,或者您是否真的想查看该设备是否可以专门连接到Google,而无需延迟将该代码包装到异步任务中

有关异步任务的信息:

AsyncTask将允许您在与UI线程不同的线程上运行代码。由于这个原因,目前它冻结了1-2秒


编辑我没有提供检查无线连接的代码,因为其他人已经提供了其他替代方案,但我确实认为有必要解释一下为什么你要经历这样的冻结。

你可以检查设备是否足够容易地连接到网络,或者你是否真的想看看设备是否可以专门连接到Google,无需延迟即可将代码包装到异步任务中

有关异步任务的信息:

AsyncTask将允许您在与UI线程不同的线程上运行代码。由于这个原因,目前它冻结了1-2秒


编辑我没有提供检查无线连接的代码,因为其他人已经提供了其他替代方案,但我确实认为有必要解释一下为什么您要经历这种冻结。

您可以使用以下代码来确定设备是否可以访问internet:

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

您可以使用以下代码确定设备是否可以访问internet:

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

在我自己的应用程序中,我使用以下代码:

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

在我自己的应用程序中,我使用以下代码:

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

我认为以下代码有助于检查网络连接:

/*
     *@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;
      }
/*
*@返回布尔值如果应用程序可以访问internet,则返回true
*/
公共布尔值isNetworkAvailable(上下文){
ConnectivityManager connectivity=(ConnectivityManager)context.getSystemService(context.connectivity\u SERVICE);
if(连接性!=null){
NetworkInfo[]info=connectivity.getAllNetworkInfo();
如果(信息!=null){
对于(int i=0;i
我认为以下代码有助于检查网络连接:

/*
     *@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;
      }
/*
*@返回布尔值如果应用程序可以访问internet,则返回true
*/
公共布尔值isNetworkAvailable(上下文){
ConnectivityManager connectivity=(ConnectivityManager)context.getSystemService(context.connectivity\u SERVICE);
if(连接性!=null){
NetworkInfo[]info=connectivity.getAllNetworkInfo();
如果(信息!=null){
对于(int i=0;i
您面临的1-2秒冻结是由于您在onCreate方法中发出的http请求造成的。在onCreate方法完成执行之前,屏幕的UI不会显示。如果仍然希望在onCreate方法中发出http请求,则可以在单独的线程中发出。可以创建一个异步任务或一个新线程,以满足您的需要


永远记住,不要在android的UI线程中执行耗时的任务。在这里,您正在UI线程中发出http请求。到目前为止,您只经历了1-2秒的延迟,如果您在android设备连接到WIFI网络时尝试相同的操作,但互联网速度非常慢,那么您的http请求可能需要5秒才能完成,如果您尝试在这5秒内执行任何UI操作,您的应用程序将显示“应用程序无响应”对话框。

您面临的1-2秒冻结是由于您在onCreate方法中发出的http请求造成的。在onCreate方法完成执行之前,屏幕的UI不会显示。如果仍然希望在onCreate方法中发出http请求,则可以在单独的线程中发出。可以创建一个异步任务或一个新线程,以满足您的需要

永远记住,不要在android的UI线程中执行耗时的任务。在这里,您正在UI线程中发出http请求。到目前为止,您只经历了1-2秒的延迟,如果您在android设备连接到WIFI网络时尝试相同的操作,但internet非常慢,那么您的http请求可能需要5秒才能完成,如果您尝试在这5秒钟内执行任何UI操作,您的应用程序