2012-07-26 9 views
9

En mi aplicación, deseo brindar al usuario la opción de elegir wi-fi/GPRS para la conectividad de red al servidor web. Pueden ser respuestas a las siguientes preguntas resolver mi problema ... 1. Cómo comprobar cuál es la opción de conectividad de red predeterminada actual habilitada. 2. Cómo habilitar wi-fi/GPRS en la selección del usuario o (deshabilite el wi-fi si el usuario elige GPRS, si solo se requiere esta opción para que GPRS funcione)Cómo proporcionar la opción para seleccionar wi-fi o GPRS para la conectividad de red en la aplicación Android

o hay alguna otra forma de hacer esto ?

Respuesta

15

Prueba esto:

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 
} 

No se olvide de agregar estos permisos en el archivo de manifiesto;

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 

Para activar o desactivar Wi-Fi, utilice mWiFi.setWifiEnabled(true|false)

Para activar/desactivar GPRS/3G, utilice el siguiente fragmento de código.

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

Gracias una tonelada ... funciona bien – isumit

+1

1 para los datos de Internet, aunque no me las arreglo para activar wifi de esta manera porque setWifiEnabled es un método de WifiManager Esto funcionó para mí WifiManager wifiManager = (WifiManager) este .getApplicationContext(). getSystemService (Context.WIFI_SERVICE); wifiManager.setWifiEnabled (verdadero); –

3

Puede proporcionar opción de usuario en pantalla utilizando siguiente bloque de código ....

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 con la respuesta @rIHaN Jithin, hay que señalar que dos permisos android.permission.UPDATE_DEVICE_STATS y android.permission.MODIFY_PHONE_STATE solo se otorgan a la aplicación del sistema (como se establece inicialmente en Eclipse o Android Studio). Entonces, si alguien se enfrenta con este problema, consulte this solution.

Cuestiones relacionadas