簡體   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