2012-07-26 14 views
9

Nella mia app voglio fornire all'utente la possibilità di scegliere wi-fi/GPRS per la connettività di rete al server web. Possono essere le risposte alle seguenti domande risolvere il mio problema ... 1. Come verificare quale opzione di connettività di rete corrente è abilitata. 2. Come abilitare il wi-fi/GPRS sulla selezione dell'utente o (disabilitare il wi-fi se l'utente sceglie GPRS - se solo questa opzione sarà necessaria per il funzionamento di GPRS)Come fornire l'opzione per selezionare wi-fi o GPRS per la connettività di rete nell'app per android

oppure c'è un altro modo per Fai questo ?

risposta

15

Prova questo:

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

if (mWifi.isConnected()) 
    //if wifi connected 
} 

ConnectivityManager connManager1 = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
NetworkInfo mMobile = connManager1.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

if (mMobile.isConnected()) { 
    //if internet connected 
} 

Non dimenticate di aggiungere queste autorizzazioni nel file manifesto;

android.permission.CHANGE_WIFI_STATE 
android.permission.ACCESS_WIFI_STATE 
android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_NETWORK_STATE 
android.permission.ACCESS_NETWORK_STATE 
android.permission.MODIFY_PHONE_STATE 
android.permission.READ_PHONE_STATE 

Per attivare o disattivare il WiFi, utilizzare mWiFi.setWifiEnabled(true|false)

Per attivare/disattivare GPRS/3G, utilizzare il seguente frammento di codice.

void turnData(boolean ON) throws Exception 
{ 

if(bv == Build.VERSION_CODES.FROYO) 
{ 

    Log.i("version:", "Found Froyo"); 
    try{ 
     Method dataConnSwitchmethod; 
     Class telephonyManagerClass; 
     Object ITelephonyStub; 
     Class ITelephonyClass; 
     TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 

     telephonyManagerClass = Class.forName(telephonyManager.getClass().getName()); 
    Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony"); 
    getITelephonyMethod.setAccessible(true); 
    ITelephonyStub = getITelephonyMethod.invoke(telephonyManager); 
    ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName()); 

    if (ON) { 
     dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("enableDataConnectivity"); 

    } else { 
     dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("disableDataConnectivity"); 
    } 
    dataConnSwitchmethod.setAccessible(true); 
    dataConnSwitchmethod.invoke(ITelephonyStub); 
    }catch(Exception e){ 
      Log.e("Error:",e.toString()); 
    } 

} 
else 
{ 
    Log.i("version:", "Found Gingerbread+"); 
    final ConnectivityManager conman = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
    final Class conmanClass = Class.forName(conman.getClass().getName()); 
    final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 
    iConnectivityManagerField.setAccessible(true); 
    final Object iConnectivityManager = iConnectivityManagerField.get(conman); 
    final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); 
    final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
    setMobileDataEnabledMethod.setAccessible(true); 
    setMobileDataEnabledMethod.invoke(iConnectivityManager, ON); 
} 

}

+0

Grazie una tonnellata ... funziona bene – isumit

+1

+1 per i dati di Internet anche se non sono riuscito ad attivare il wifi in questo modo perché setWifiEnabled è un metodo di WifiManager Questo ha funzionato per me WifiManager wifiManager = (WifiManager) questo . .getApplicationContext() getSystemService (Context.WIFI_SERVICE); wifiManager.setWifiEnabled (true); –

3

È possibile fornire opzione per utente su schermo utilizzando seguente blocco di codice ....

public static ShowAvailable() 
{ 
    ConnectivityManager connectivityMgr = (ConnectivityManager) 
    getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] nwInfos = connectivityMgr.getAllNetworkInfo(); 
     for (NetworkInfo nwInfo : nwInfos) 
      { 
      Log.d(TAG, "Network Type Name: " + 
      nwInfo.getTypeName()); Log.d(TAG, "Network available: " + 
      nwInfo.isAvailable()); Log.d(TAG, "Network c_or-c: " + 
      nwInfo.isConnectedOrConnecting()); Log.d(TAG, "Network connected: " 
      + nwInfo.isConnected()); 
      } 

} 
1

Continuando la risposta @rIHaN Jithin, si deve rilevare che due permessi android.permission.UPDATE_DEVICE_STATS e android.permission.MODIFY_PHONE_STATE sono concessi solo all'app di sistema (come inizialmente impostata in Eclipse o Android Studio). Quindi, se qualcuno si troverà di fronte a questo problema, guarda a this solution.