Jak sprawdzić, czy Google Glass jest podłączony do Internetu za pomocą GDK

Czy istnieje sposób na wykrycie, czy Google Glass jest podłączony do Internetu w czasie wykonywania? Na przykład często korzystam z wprowadzania głosowego w mojej aplikacji „Nie mogę teraz dotrzeć do Google”. Zamiast tego chciałbym uprzednio przechwycić warunek, który spowodowałby ten komunikat i użyć wartości domyślnych, zamiast pytać o wprowadzenie głosu. Po dłuższym przeszukiwaniu jedyne, co mogłem znaleźć, to rozwiązanie tego samego pytania dla Androida w ogóle:

private boolean isConnected() {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

Próbowałem użyć tego dla mojego szkła, ale wydaje się, że nie działa (wyłączyłem wifi i dane, ale isConnected () nadal zwraca wartość true, mimo że otrzymuję komunikat „Nie mogę teraz dotrzeć do Google”). Czy ktoś wie, czy GDK ma sposób to zrobić? Czy powinno działać coś podobnego do powyższej metody?

EDIT: Oto moje ewentualne rozwiązanie, oparte częściowo na odpowiedzi EntryLevelDev poniżej.

Musiałem użyć wątku w tle, aby użyć żądań HTTP GET, aby uniknąć uzyskania wyjątku NetworkOnMainThreadException, więc postanowiłem uruchomić go co kilka sekund i zaktualizować lokalną zmienną isConnected:

public static boolean isConnected = false;

public boolean isDeviceConnectedToInternet() {
    return isConnected;
}

private class CheckConnectivityTask extends AsyncTask<Void, Boolean, Boolean> {
    protected Boolean doInBackground(Void... voids) {
        while(true) {
            // Update isConnected variable.
            publishProgress(isConnected());
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * Determines if the Glassware can access the internet.
     * isNetworkAvailable() is used first because there is no point in executing an HTTP GET
     * request if ConnectivityManager and NetworkInfo tell us that no network is available.
     */
    private boolean isConnected(){
        if (isNetworkAvailable()) {
            HttpGet httpGet = new HttpGet("http://www.google.com");
            HttpParams httpParameters = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(httpParameters, 3000);
            HttpConnectionParams.setSoTimeout(httpParameters, 5000);

            DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
            try{
                Log.d(LOG_TAG, "Checking network connection...");
                httpClient.execute(httpGet);
                Log.d(LOG_TAG, "Connection OK");
                return true;
            }
            catch(ClientProtocolException e){
                e.printStackTrace();
            }
            catch(IOException e){
                e.printStackTrace();
            }
            Log.d(LOG_TAG, "Connection unavailable");
        } else {
            // No connection; for Glass this probably means Bluetooth is disconnected.
            Log.d(LOG_TAG, "No network available!");
        }
        return false;
    }

    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        Log.d(LOG_TAG, String.format("In isConnected(), activeNetworkInfo.toString(): %s",
                activeNetworkInfo == null ? "null" : activeNetworkInfo.toString()));
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

    protected void onProgressUpdate(Boolean... isConnected) {
        DecisionMakerService.isConnected = isConnected[0];
        Log.d(LOG_TAG, "Checking connection: connected = " + isConnected[0]);
    }
}

Aby rozpocząć, zadzwońnew CheckConnectivityTask().execute(); (prawdopodobnie z onCreate ()). Musiałem też dodać je do mojego Android.manifest:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

questionAnswers(2)

yourAnswerToTheQuestion