繁体   English   中英

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

[英]How to check if android device has access to internet?

我正在使用以下方法检查设备是否可以访问互联网。
在此代码中,我尝试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访问。

谢谢。

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

有关ASync任务的信息: http : //developer.android.com/reference/android/os/AsyncTask.html

AsyncTask将允许您在与UI线程分开的线程上运行代码。 因此,目前冻结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 {
            //
        }

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

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

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

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

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

/*
     *@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;
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM