android開啟和關閉行動網路
阿新 • • 發佈:2019-01-30
/** * 移動資料開啟和關閉 * * @param context * @param enabled */ public void setMobileDataStatus(Context context, boolean enabled) { ConnectivityManager conMgr = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); // ConnectivityManager類 Class<?> conMgrClass = null; // ConnectivityManager類中的欄位 Field iConMgrField = null; // IConnectivityManager類的引用 Object iConMgr = null; // IConnectivityManager類 Class<?> iConMgrClass = null; // setMobileDataEnabled方法 Method setMobileDataEnabledMethod = null; try { // 取得ConnectivityManager類 conMgrClass = Class.forName(conMgr.getClass().getName()); // 取得ConnectivityManager類中的物件Mservice iConMgrField = conMgrClass.getDeclaredField("mService"); // 設定mService可訪問 iConMgrField.setAccessible(true); // 取得mService的例項化類IConnectivityManager iConMgr = iConMgrField.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(); } } /** * 獲取移動資料開關狀態 * * @param context * @param getMobileDataEnabled * @return */ public boolean getMobileDataStatus(Context context, String getMobileDataEnabled) { ConnectivityManager cm; cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); Class cmClass = cm.getClass(); Class[] argClasses = null; Object[] argObject = null; Boolean isOpen = false; try { Method method = cmClass.getMethod(getMobileDataEnabled, argClasses); isOpen = (Boolean) method.invoke(cm, argObject); } catch (Exception e) { e.printStackTrace(); } return isOpen; }
最後,別忘了在AndroidMannifest.xml檔案裡新增訪問許可權
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
通過上面的程式碼可以知道,當開啟行動網路時呼叫setMobileDataStatus(context,true),關閉呼叫setMobileDataStatus(context,false),通過getMobileDataStatus(String getMobileDataEnabled)方法返回的布林值判斷當移動資料網路前狀態的開啟和關閉。