如何提供选项,以selectWi – Fi或GPRS的networking连接在Android应用程序

在我的应用程序,我想提供用户selectWi-Fi / GPRSnetworking连接到Web服务器的选项。 可能是以下几个问题的答案解决我的问题… 1.如何检查当前的默认networking连接选项启用。 2.如何在用户select上启用wi-fi / GPRS或(如果用户selectGPRS,则禁用Wi-Fi – 如果GPRS只有这个选项才能工作)

还是有其他的方法来做到这一点?

尝试这个:

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 } 

不要忘记在清单文件中添加这些权限;

 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 

要启用或禁用Wifi,请使用mWiFi.setWifiEnabled(true|false)

要启用/禁用GPRS / 3G,请使用以下代码片段。

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

}

您可以使用以下代码块为屏幕上的用户提供选项….

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

继续@rIHaN JiTHiN答案,应该注意的是,两个权限android.permission.UPDATE_DEVICE_STATSandroid.permission.MODIFY_PHONE_STATE只被授予系统应用程序(因为它最初在Eclipse或Android Studio中设置)。 所以如果有人会面对这个问题,看看这个解决scheme 。