Domanda

Questo è quello che vorrei fare:

= > SE il WiFi è abilitato E attivo, avvia un intento (in realtà è un WebView che ottiene il suo contenuto = > le istruzioni della mia app sul web)

= > In caso contrario, lancerei un altro intento in modo da non mostrare un WebView con " Pagina Web non disponibile ... La pagina Web in http://www.mywebsite.com potrebbe essere temporaneamente inattivo o potrebbe essersi spostato ... "

Inizialmente avrei dovuto usare

if (wifi.isWifiEnabled ())

ma ciò non dice se la connessione Wifi è ATTIVA o meno. Dice solo che l'utente ha attivato l'interruttore. Il dispositivo può o non può essere collegato ... È corretto?

Quindi ho provato a usare:

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

ma ho notato che restituisce una stringa anche se la connessione è stata persa o è stata disabilitata ...?

Come devo fare allora?

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

Esiste un modo più generale per verificare se il dispositivo ha la connettività a Internet appena prima di lanciare un intento? sia tramite Wifi, 3G, ecc ...

Grazie in anticipo per il tuo aiuto.

È stato utile?

Soluzione

È possibile utilizzare il seguente codice per verificare la connettività:

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

Assicurati di aver registrato l'intento android.net.conn.CONNECTIVITY_CHANGE nel tuo Manifest, altrimenti non riceverai mai una notifica che sei online.

Ho avuto problemi con questo problema negli ultimi due giorni e ho appena capito che dovevo registrare CONNECTIVITY_CHANGE e non solo WIFI_STATE_CHANGED.

Altri suggerimenti

Prova android.net.ConnectivityManager.getActiveNetworkInfo () : se restituisce null non hai alcuna connessione; se restituisce un oggetto NetworkInfo , puoi verificare lo stato della connessione con NetworkInfo.getState () e se è NetworkInfo.State.CONNECTED , quindi sei connesso, altrimenti non lo sei.

Puoi farlo come segue:

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

         }  

Otterrai 0,1,2,3 a seconda dello stato in cui si trova il Wifi, quindi ad esempio 2 si sta connettendo, puoi controllare il resto nei documenti

Nella tua 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
        }
    }                   
}

E nel tuo AndroidManifest.xml assicurati di registrarti per l'intento di trasmissione android.net.wifi.supplicant.CONNECTION_CHANGE.

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

isConnected () non funziona perfettamente, cerca qualcos'altro

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

questo codice controlla se sei con wifi o 3g o niente, nel caso di wifi acceso ma non connesso a una rete o 3g hai problemi di segnale che rileva questi dettagli, con DettagliaStati

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top