Android實現WIFI和GPRS網路的切換
阿新 • • 發佈:2020-01-07
在專案的開發中因為要使用到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網路的切換了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。