簡體   English   中英

Android-如何檢查設備是否可以連接互聯網?

[英]Android - How to check, device has Internet connection?

此代碼有效:

public static boolean isConnected()
{
    ConnectivityManager cm = (ConnectivityManager)App.getAppContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo ni = cm.getActiveNetworkInfo();
    if (ni != null) {
        if (ni.getType() == ConnectivityManager.TYPE_WIFI)
            if (ni.isConnected())
                return true;
        if (ni.getType() == ConnectivityManager.TYPE_MOBILE)
            if (ni.isConnected())
                return true;
        if (ni.getType() == ConnectivityManager.TYPE_ETHERNET)
            if (ni.isConnected())
                return true;
    }
    return false; //none of connections available
}

問題是:我們還需要檢查TYPE_MOBILE_DUNTYPE_WIMAXTYPE_VPN嗎?

設備可以通過藍牙連接到Internet嗎?

只是一條評論。 想一想您需要什么,並記住連接到wifi路由器並不意味着您可以連接互聯網,也可以像后端服務器那樣到達任何興趣點。 如果您的應用需要訪問服務才能正常工作,那么最好的方法就是檢查您是否可以通過異步調用盡早到達該服務,並且只有在您可以驗證該連接的情況下才能繼續操作。

嘗試向http://www.google.com發出一個簡單的GET請求。 如果您的響應代碼為200或400,則說明存在互聯網連接。

protected static boolean hasInternetAccess()
{
    try
    {
        URL url = new URL("http://www.google.com");

        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
        urlc.setRequestProperty("User-Agent", "Android Application:1");
        urlc.setRequestProperty("Connection", "close");
        urlc.setConnectTimeout(1000 * 30);
        urlc.connect();

        // http://www.w3.org/Protocols/HTTP/HTRESP.html
        if (urlc.getResponseCode() == 200 || urlc.getResponseCode() > 400)
        {
            // Requested site is available
            return true;
        }
    }
    catch (Exception ex)
    {
        // Error while trying to connect
        return false;
    }
    return false;
}

有關更多信息,請參閱: 完善的功能,可檢查包括藍牙聲像在內的Android Internet連接

這就是我所使用的:

public static boolean isOffline() {
    ConnectivityManager cm = (ConnectivityManager) BigOvenApplication.getInstance()
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();

    return netInfo == null || !netInfo.isConnected();
}

我認為您只需要這些。

只需調用方法isConnectedToNetwork來檢查它是否具有連接。 在公共類文件中編寫此方法。 因此,您可以在任何需要的地方使用簡單的方法調用。

public static boolean isConnectedToNetwork(Context thisActivity) {
        ConnectivityManager connMgr = (ConnectivityManager) thisActivity.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
        if (activeInfo != null && activeInfo.isConnected()) {
            return true;
        }
        return false;
    }

在開始操作之前進行檢查。 // thisActivity表示片段的getActivity()

   if (isConnectedToNetwork(thisActivity)) {
           // your operation code follows
     } else {
          //show alert box that there is no internet connection
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM