2009-11-15 24 views

risposta

0

È inoltre possibile utilizzare il TelephonyManager per scoprire che il tipo di rete mobile è:

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
int networkType = telephonyManager.getNetworkType(); 

possibili tipi di rete sono elencati in http://developer.android.com/reference/android/telephony/TelephonyManager.html#getNetworkType%28%29

+0

non funziona per Wi-Fi, lo fa? – shkschneider

+0

No, è per questo che ho detto "Puoi anche ..." nel caso qualcuno abbia bisogno di sapere il tipo di rete mobile utilizzata. Almeno alcune delle altre risposte dicono solo se la connessione è WiFi o mobile. – Intrications

7

È possibile utilizzare questo per determinare se si è connessi:

final ConnectivityManager connectManager = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE); // ctx stands for the Context 
final NetworkInfo mobile = connectManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
final NetworkInfo wifi = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI ); 

// Return true if connected, either in 3G or wi-fi 
return ((mobile != null && mobile.getState() == NetworkInfo.State.CONNECTED) || 
     (wifi != null && wifi.getState() == NetworkInfo.State.CONNECTED) ); 
} 

Questo codice richiede le autorizzazioni ACCESS_NETWORK_STATE e ACCESS_WIFI_STATE.

MODIFICA: public NetworkInfo getNetworkInfo (int networkType)has been deprecated in API 21. Per i livelli di API superiori a 20 si può fare come segue:

final Network[] networks = connectManager.getAllNetworks(); 
boolean connected = false; 

for (int ctr = 0; !connected && ctr < networks.length; ++ctr) { 
    final NetworkInfo network = connectManager.getNetworkInfo(networks[ctr]); 
    final int netType = network.getType(); 

    connected = (network.getState() == NetworkInfo.State.CONNECTED) && 
      (
       netType == ConnectivityManager.TYPE_MOBILE  || 
       netType == ConnectivityManager.TYPE_WIFI  /*|| 
       netType == ConnectivityManager.TYPE_WIMAX  || 
       netType == ConnectivityManager.TYPE_ETHERNET */ ); 
} 

return connected; 

ho limitato questo codice per la connessione Wi-Fi e 3G, come per ogni domanda del PO ma è facile da estendere nuovamente a aggiunto tipi di connessione quali Ethernet o Wi -Max.

+0

Grazie per la tua preoccupazione. sto cercando di usare questo codice come in questo modo, ma la sua forza è di chiudere \t se (connesso) { \t startActivity (intent7); \t} – user667340

+0

Ciò significa che nel codice che si sta eseguendo quando connesso c'è un errore. Ma non nel codice che stai eseguendo quando non connesso. – Shlublu

+0

si prega di guida come posso mettere in caso di affermazione che se è connesso a Internet dovrebbe aprire l'altro intento altrimenti viene semplicemente visualizzato in brindisi. – user667340

2

Non so perché l'app si arresta in modo anomalo, forse questo aiuta. Forse provare questo metodo: (ha bisogno del contesto di applicazione)

public static boolean isInternetConnectionActive(Context context) { 
    NetworkInfo networkInfo = ((ConnectivityManager) context 
    .getSystemService(Context.CONNECTIVITY_SERVICE)) 
    .getActiveNetworkInfo(); 

    if(networkInfo == null || !networkInfo.isConnected()) { 
    return false; 
    } 
    return true; 
} 

quindi provare a chiamare

if(isInternetConnectionActive(getApplicationContext)) { 
/* start Intent */ 
} 
else { 
    /* show Toast */ 
} 

speranza che questo aiuta

Problemi correlati