android开启和关闭移动网络

来源:互联网 发布:mac版千牛怎么打单 编辑:程序博客网 时间:2024/04/30 23:44

转自:http://blog.csdn.net/stevenhu_223/article/details/7860964

/** * 移动数据开启和关闭 *  * @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类中的对象MserviceiConMgrField = conMgrClass.getDeclaredField("mService");// 设置mService可访问iConMgrField.setAccessible(true);// 取得mService的实例化类IConnectivityManageriConMgr = 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)方法返回的布尔值判断当移动数据网络前状态的开启和关闭。