2012-03-25 14 views
13

Próbowałem poniższy kod, aby sprawdzić, czy mój telefon komórkowy jest podłączony do sieci bezprzewodowej i działa dobrze, gdy chcę wiedzieć, czy mój telefon komórkowy jest podłączony do sieci, ale nie informuje o dostępie do Internetu ... coś jak "Pingowanie" dowolnej witryny. Właściwie śledziłem wiele linków, ale wciąż nie mam odpowiedzi, więc będę wdzięczny, jeśli ktoś może pomóc.Android - Jak sprawdzić dostęp do Internetu, a nie tylko połączenie z Internetem?

Dzięki z góry.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Toast t = new Toast(getApplicationContext()); 

    if (isInternetOn()) { 
     // INTERNET IS AVAILABLE, DO STUFF.. 
     Toast.makeText(ConnectivityTestActivity.this,"Network is Available", Toast.LENGTH_LONG).show(); 

     } 
    else { 
     // NO INTERNET AVAILABLE, DO STUFF.. 
     Toast.makeText(ConnectivityTestActivity.this,"No Network Available", Toast.LENGTH_LONG).show(); 

     } 
} 

public final boolean isInternetOn() { 


    ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    // ARE WE CONNECTED TO THE NET 
    if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || 
    connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING || 
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING || 
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) { 
    // MESSAGE TO SCREEN FOR TESTING (IF REQ) 
    //Toast.makeText(this, connectionType + ” connected”, Toast.LENGTH_SHORT).show(); 
    return true; 
    } else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) { 

    return false; 
    } 
    return false; 
    }} 

EDIT:

Obserwuj poniżej linku zawiera wielką odpowiedź na serwerze Ping google i uzyskać wynik

https://stackoverflow.com/a/16458623/1239911

Odpowiedz

8

Właściwie użyłem tej samej funkcji isInternetOn(), ale usunąłem stan połączenia. Musiał sprawdzić stan połączenia, jeśli jest podłączony i czy próbuje się połączyć. To nie działało dla mnie, więc usunąłem sprawdzanie stanu połączenia, a następnie zadziałało.

Dzięki za wszystkie odpowiedzi.

public final boolean isInternetOn() 
{ 
    ConnectivityManager connec = (ConnectivityManager) 
    getSystemService(Context.CONNECTIVITY_SERVICE); 

    // ARE WE CONNECTED TO THE NET 
    if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || 
     connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) 
    { 
    // MESSAGE TO SCREEN FOR TESTING (IF REQ) 
    //Toast.makeText(this, connectionType + ” connected”, Toast.LENGTH_SHORT).show(); 
    return true; 
    } 
    else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED 
    || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) 
    { 
    return false; 
    } 

    return false; 
} 
+3

Tylko uwaga ... Kiedyś powyższy kod z innego pytanie tutaj w stackoverflow.com możemy użyć „ConnectivityManager.Type_WIFI” lub „ConnectivityManager.Type_Mobile” zamiast 0 & 1 w getNetworkInfo() – Amt87

+1

Dlaczego potrzebowałeś jeszcze części "else if"? Jeśli nie jesteśmy połączeni, oznacza to, że jesteśmy odłączeni. Czy możesz dać mi znać, jeśli jest jakikolwiek pożytek z tej części "else if"? –

+1

Może być PODŁĄCZONY, ODŁĄCZONY, PODŁĄCZONY, ODŁĄCZONY, PODWIESZANY i NIEZNANY. Możesz sprawdzić te stany w developer.android.com lub po kliknięciu ctrl + spacja po (NetworkInfo.State.) W kodzie. Chciałbym, żeby to było pomocne. – Amt87

6

zobaczyć próbkę:

public static boolean isWifiEnabled() { 
    if (!gWifiManager.isWifiEnabled()) { 

     if (mCanShowWifiToast) { 
      new Thread(mWifiToastControl).start(); 
      G.gHandler.post(mNoWifiRunnable); 
     } 

     return false; 
    } else { 
     int linkspeed = gWifiManager.getConnectionInfo().getLinkSpeed(); 
     if (linkspeed < 5) { 
      if (mCanShowWifiToast) { 
       new Thread(mWifiToastControl).start(); 
       G.gHandler.post(mNoWifiRunnable); 
      } 

      return false; 
     } 
    } 

    return true; 
} 
Powiązane problemy