2009-11-28 7 views
14

Dies ist, was würde ich tun:ANDROID: wenn WiFi aktiviert und aktiv ist, starten Sie eine Absicht

=> IF WiFi aktiviert und aktiv ist, starten Sie eine Absicht (in der Tat ist es ein WebView, das seinen Inhalt bekommt => die Anweisungen meiner App im Internet)

=> WENN NICHT, dann würde ich eine andere Absicht starten, so dass ich kein WebView mit "Webseite nicht verfügbar ... Die Webseite bei http://www.mywebsite.com könnte sei zeitweise down oder habe es sich vielleicht bewegt ... "

Ich habe anfangs gelernt

zu verwenden

if (wifi.isWifiEnabled())

aber das sagt nicht, ob die Wifi-Verbindung AKTIV ist oder nicht. Es besagt nur, dass der Benutzer den Schalter eingeschaltet hat. Das Gerät kann oder darf nicht angeschlossen sein ... Ist das korrekt?

Dann habe ich versucht zu nutzen:

if (wifi.getConnectionInfo() getSSID() = null.!)

aber ich merkte, dass es eine Zeichenfolge, auch wenn die Verbindung verloren gegangen ist zurück oder hat wurde deaktiviert ...?

Wie soll ich dann tun?

Gibt es einen allgemeineren Weg zu testen, ob das Gerät die Konnektivität zum Internet hat, kurz bevor es eine Absicht auslöst? sei es durch Wifi, 3G, etc ...

Vielen Dank im Voraus für Ihre Hilfe.

+0

WIFI_STAT_ENABLED bedeutet nur, dass das WIFI-Radio eingeschaltet ist. Dies hat nichts damit zu tun, ob Sie tatsächlich mit einem Access Point verbunden sind oder nicht. –

+1

in der Tat, was würdest du vorschlagen? – Hubert

+0

Mögliches Duplikat von [wie zu sehen, wenn WiFi in Android verbunden ist] (http://StackOverflow.com/Questions/3841317/How-To-see-if-Wifi-IS-connected-in-android) –

Antwort

20

Sie den folgenden Code verwenden können, für die Konnektivität zu überprüfen:

private static boolean isConnected(Context context) { 
    ConnectivityManager connectivityManager = (ConnectivityManager) 
     context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = null; 
    if (connectivityManager != null) { 
     networkInfo = 
      connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    } 
    return networkInfo == null ? false : networkInfo.isConnected(); 
} 

Bitte stellen Sie sicher, dass Sie die android.net.conn.CONNECTIVITY_CHANGE Absicht in Ihrem Manifest registriert haben, sonst werden Sie nie erhalten Sie eine Benachrichtigung, dass Sie online sind.

Ich habe in den letzten Tagen mit diesem Problem gekämpft und mir wurde gerade klar, dass ich CONNECTIVITY_CHANGE und nicht nur WIFI_STATE_CHANGED registrieren musste.

+0

Wäre es nicht angemessener/korrekter, diese Methode 'isConnectedViaWiFi' zu nennen? –

5

Sie können es wie folgt:

@Override 
    public void onReceive(Context context, Intent intent) { 

    String action = intent.getAction(); 

     if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)){ 

     Log.d("WIFI", "WIFI has changed"); 
     int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1); 
     Log.d("WIFI", "WIFI State = " + wifiState); 
     setCurrentWifiState(wifiState); 

     } 

Sie erhalten 0,1,2,3 je nachdem, welchen Zustand das Wifi in ist, so zum Beispiel 2 verbindet, können Sie den Rest Check-in die Dokumente

8

Versuchen Sie android.net.ConnectivityManager.getActiveNetworkInfo(): wenn es null zurückgibt, haben Sie keine Verbindung; Wenn es ein NetworkInfo Objekt zurückgibt, können Sie den Status der Verbindung mit NetworkInfo.getState() überprüfen, und wenn es NetworkInfo.State.CONNECTED ist, dann sind Sie verbunden, sonst sind Sie nicht.

+0

wird versuchen, dass Vielen Dank. H. – Hubert

+1

das funktioniert wirklich gut, danke. – Hubert

2

In Ihrer BroadcastReceiver Klasse:

@Override 
public void onReceive(Context context, Intent intent) { 
String action = intent.getAction(); 
    if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){     
     boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false); 
     if (connected){ 
      // start your service here 
     } 
    }     
} 

Und in AndroidManifest.xml sicherstellen, dass Sie für die Absicht android.net.wifi.supplicant.CONNECTION_CHANGE Broadcast registrieren.

<intent-filter >  
    <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> 
</intent-filter> 
0

isConnected() nicht funktioniert völlig in Ordnung, Forschung etwas anderes

final ConnectivityManager connMgr = (ConnectivityManager) 
     this.getSystemService(Context.CONNECTIVITY_SERVICE); 
final android.net.NetworkInfo wifi = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    final android.net.NetworkInfo mobile = 
    connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if(wifi.isAvailable() && wifi.getDetailedState() == DetailedState.CONNECTED){ 
     Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show(); 
    } 
    else if(mobile.isAvailable() && mobile.getDetailedState() == DetailedState.CONNECTED){ 
     Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show(); 
    } 
    else 
    { 
     Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show(); 
    } 

diesen Code zu überprüfen, ob Sie mit WiFi oder 3G oder nichts, im Fall von WiFi auf, aber nicht zu einem Netz oder 3g verbunden haben Signalproblem, das es diese Details erkennt, mit DetailedStates

Verwandte Themen