2009-11-28 5 views
14

intention C'est ce que je voudrais faire:ANDROID: si le WiFi est activé et actif, lancer une

=> IF WiFi est activé et actif, lancer une intention (en fait, il est un WebView qui obtient son contenu => les instructions de mon application sur le web)

=> SI PAS, alors je voudrais lancer une autre intention de sorte que je ne montre pas un WebView avec "page Web non disponible ... La page Web à http://www.mywebsite.com pourrait être temporairement vers le bas ou il peut avoir déplacé ... "

Je pensais initialement à utiliser

if (wifi.isWifiEnabled())

mais cela ne dit pas si la connexion Wifi est ACTIVE ou non. Il dit seulement que l'utilisateur a allumé l'interrupteur. L'appareil peut être connecté ou non ... Est-ce correct?

Alors j'ai essayé d'utiliser:

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

mais je remarqué qu'il retourne une chaîne même si la connexion a été perdue ou a été désactivé ...?

Comment dois-je faire alors?

wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
Intent intent_instructions; 

      if (wifi.getConnectionInfo().getSSID()!= null){ 
       Log.i("Hub", "WiFi is enabled AND active !"); 
       Log.i("Hub", "SSID = "+wifi.getConnectionInfo().getSSID()); 
       intent_instructions = new Intent(this, Instructions.class); 
      }else{ 
       Log.i("Hub", "NO WiFi"); 
       intent_instructions = new Intent(this, Instructions_No_WiFi.class); 
      } 
      this.startActivity(intent_instructions); 

Existe-t-il un moyen plus général de tester si l'appareil dispose de la connectivité à Internet juste avant de lancer une intention? que ce soit par Wifi, 3G, etc ...

Merci d'avance pour votre aide.

+0

WIFI_STAT_ENABLED signifie simplement que la radio WIFI est activée. Cela n'a rien à voir avec le fait que vous soyez ou non connecté à un point d'accès. –

+1

en effet, alors que suggérez-vous? – Hubert

+0

duplication possible de [comment voir si le wifi est connecté dans android] (http://stackoverflow.com/questions/3841317/how-to-see-if-wifi-is-connected-in-android) –

Répondre

20

Vous pouvez utiliser le code suivant pour vérifier la connectivité:

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(); 
} 

S'il vous plaît assurez-vous que vous avez enregistré l'intention android.net.conn.CONNECTIVITY_CHANGE dans votre Manifest, ou bien, vous ne serez jamais recevoir une notification que vous êtes en ligne.

J'ai eu du mal avec ce problème au cours des derniers jours et je viens de me rendre compte que j'avais besoin d'enregistrer CONNECTIVITY_CHANGE et pas seulement WIFI_STATE_CHANGED.

+0

Ne serait-il pas plus approprié/correct de nommer cette méthode 'isConnectedViaWiFi'? –

5

Vous pouvez le faire comme suit:

@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); 

     } 

Vous obtiendrez 0,1,2,3 selon l'état dans lequel le Wifi est, donc par exemple 2 est la connexion, vous pouvez vérifier le reste dans les documents

8

Essayez android.net.ConnectivityManager.getActiveNetworkInfo(): s'il renvoie null vous n'avez aucune connexion; si elle renvoie un objet NetworkInfo, vous pouvez vérifier l'état de la connexion avec NetworkInfo.getState(), et si c'est NetworkInfo.State.CONNECTED alors vous êtes connecté, sinon vous ne l'êtes pas.

+0

va essayer que Merci. H. – Hubert

+1

en effet cela fonctionne très bien, merci. – Hubert

2

Dans votre classe BroadcastReceiver:

@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 
     } 
    }     
} 

Et dans votre AndroidManifest.xml assurez-vous que vous vous inscrivez à l'intention de diffusion android.net.wifi.supplicant.CONNECTION_CHANGE.

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

isConnected() ne marche pas jouer pleinement ok, recherche autre chose

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(); 
    } 

cette vérification de code si vous êtes avec wifi ou 3g ou rien, dans le cas de wifi mais non connectée à un réseau ou 3g avoir un problème de signal, il détecte ces détails, avec DetailedStates

Questions connexes