1. 程式人生 > 程式設計 >Android實現WIFI和GPRS網路的切換

Android實現WIFI和GPRS網路的切換

在專案的開發中因為要使用到WIFI和GPRS網路的切換,因此就研究了一下通過程式碼開啟WIFI和GPRS的工作。

無論是切換WIFI還是切換GPRS網路都需要設定相應的許可權,所以需要在AndroidManifest.xml檔案中加入以下幾行程式碼。

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

1、切換WIFI網路

public static void toggleWiFi(Context context,boolean enabled) {
 WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
 wm.setWifiEnabled(enabled);
 }

2、切換GPRS網路

由於Android沒有提供直接切換GPRS網路的方法,通過檢視系統原始碼發現,系統是呼叫IConnectivityManager類中的setMobileDataEnabled(boolean)方法來設定GPRS網路的,由於方法不可見,只能採用反射來呼叫,程式碼如下。

public static void toggleMobileData(Context context,boolean enabled) {
 ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 
 Class<?> conMgrClass = null; // ConnectivityManager類
 Field conMgrField = null; // ConnectivityManager類中的欄位
 Object iConMgr = null; // IConnectivityManager類的引用
 Class<?> iConMgrClass = null; // IConnectivityManager類
 Method setMobileDataEnabledMethod = null; // setMobileDataEnabled方法
 
 try {
 // 取得ConnectivityManager類
 conMgrClass = Class.forName(conMgr.getClass().getName());
 // 取得ConnectivityManager類中的物件mService
 conMgrField = conMgrClass.getDeclaredField("mService");
 // 設定mService可訪問
 conMgrField.setAccessible(true);
 // 取得mService的例項化類IConnectivityManager
 iConMgr = conMgrField.get(conMgr);
 // 取得IConnectivityManager類
 iConMgrClass = Class.forName(iConMgr.getClass().getName());
 // 取得IConnectivityManager類中的setMobileDataEnabled(boolean)方法
 setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled",Boolean.TYPE);
 // 設定setMobileDataEnabled方法可訪問
 setMobileDataEnabledMethod.setAccessible(true);
 // 呼叫setMobileDataEnabled方法
 setMobileDataEnabledMethod.invoke(iConMgr,enabled);
 }
 catch (ClassNotFoundException e) {
 e.printStackTrace();
 }
 catch (NoSuchFieldException e) {
 e.printStackTrace();
 }
 catch (SecurityException e) {
 e.printStackTrace();
 }
 catch (NoSuchMethodException e) {
 e.printStackTrace();
 }
 catch (IllegalArgumentException e) {
 e.printStackTrace();
 }
 catch (IllegalAccessException e) {
 e.printStackTrace();
 }
 catch (InvocationTargetException e) {
 e.printStackTrace();
 }
 }

根據以上所寫就可以做到WIFI網路和GPRS網路的切換了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。