Question

Voici ce que je voudrais faire:

= > Si le Wi-Fi est activé ET actif, lancez une intention (en fait, c'est une WebView qui obtient son contenu = > les instructions de mon application sur le Web)

= > Sinon, je lancerais une autre intention pour ne pas afficher une vue Web avec "page Web non disponible ... La page Web à http://www.mywebsite.com est peut-être temporairement indisponible ou s’est déplacé ... "

J'ai d'abord pensé à utiliser

if (wifi.isWifiEnabled ())

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

Ensuite, j'ai essayé d'utiliser:

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

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

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 vérifier si le périphérique dispose de la connectivité à Internet juste avant de lancer une intention? que ce soit par Wifi, 3G, etc ...

Merci d'avance pour votre aide.

Était-ce utile?

La solution

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

Assurez-vous que vous avez bien enregistré l'intention android.net.conn.CONNECTIVITY_CHANGE dans votre manifeste, sinon vous ne recevrez jamais de notification indiquant que vous êtes en ligne.

Je suis aux prises avec ce problème depuis quelques jours et je viens tout juste de réaliser que je devais enregistrer CONNECTIVITY_CHANGE et pas seulement WIFI_STATE_CHANGED.

Autres conseils

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

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 en fonction de l'état du Wi-Fi. Ainsi, par exemple, 2 se connecte, vous pouvez consulter le reste dans les documents

.

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 de vous inscrire à l'intention de diffusion android.net.wifi.supplicant.CONNECTION_CHANGE.

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

isConnected () ne fonctionne pas correctement, recherchez 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();
    }

ce code vérifie si vous êtes avec wifi ou 3g ou rien, dans le cas où le wifi est activé mais pas connecté à un réseau ou 3g ont un problème de signal, il détecte ces détails, avec DetailedStates

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top