Android 5.0以前使用ConnectivityManager通过反射两个方法setMobileDataEnabled和getMobileDataEnabled来控制移动网络开和关。
Android 5.0以后使用TelephonyMananger类通过反射获取setDataEnabled和getDataEnabled类完成操作。
注意:需要使用系统权限:android:sharedUserId=”android.uid.system”。

public void setMobileDataState(Context context, boolean enabled) {    TelephonyManager telephonyService = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);    try {        Method setDataEnabled = telephonyService.getClass().getDeclaredMethod("setDataEnabled",boolean.class);        if (null != setDataEnabled) {            setDataEnabled.invoke(telephonyService, enabled);        }    } catch (Exception e) {        e.printStackTrace();    }}public boolean getMobileDataState(Context context) {    TelephonyManager telephonyService = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);    try {        Method getDataEnabled = telephonyService.getClass().getDeclaredMethod("getDataEnabled");        if (null != getDataEnabled) {            return (Boolean) getDataEnabled.invoke(telephonyService);        }    } catch (Exception e) {        e.printStackTrace();    }    return false;}1 "android.permission.MODIFY_PHONE_STATE" />

自适应Android5.0以前及以后的代码:

TelephonyManager mTelephonyManager = (TelephonyManager)context                  .getSystemService(Context.TELEPHONY_SERVICE);ConnectivityManager mConnectivityManager =(ConnectivityManager)context                                  .getSystemService(Context.CONNECTIVITY_SERVICE);
public void setDataEnable(){    Object object = Build.VERSION.SDK_INT >= 21 ?       mTelephonyManager : mConnectivityManager;      String methodName = Build.VERSION.SDK_INT >= 21 ? "setDataEnabled" : "setMobileDataEnabled";      Method setMobileDataEnable;      try {          setMobileDataEnable = object.getClass().getMethod(methodName, boolean.class);          setMobileDataEnable.invoke(object, true);         } catch (Exception e) {              e.printStackTrace();          }  }
public void checkConnectState(){    while(true){        Object object = Build.VERSION.SDK_INT >= 21 ? mTelephonyManager : mConnectivityManager;          String methodName = Build.VERSION.SDK_INT >= 21 ? "getDataEnabled" : "getMobileDataEnabled";           Method getMobileDataEnable;           boolean isDataEnabled = false;         try {               getMobileDataEnable = object.getClass().getMethod(methodName, null);               isDataEnabled = (Boolean) getMobileDataEnable.invoke(object, null);               } catch (Exception e) {                  e.printStackTrace();                }              if(isDataEnabled){                break;            }else{                sleep(200);            }    }}

更多相关文章

  1. vim+ctags+cscope 打造Android源码阅读工具
  2. Android(安卓)中使用自定义字体的方法
  3. android使用ant编译找不到apkbuilder.jar的错误的解决方法
  4. Android(安卓)入门 和 环境搭建
  5. Android系统自带主题的使用及自定义主题
  6. Android(安卓)入门 和 环境搭建
  7. TextView中ellipsize属性焦点异常处理
  8. android 流量统计实现思路
  9. UI组件之AdapterView及其子类(二)GridView网格视图的使用

随机推荐

  1. Bundle源码解析
  2. ffmpeg入门教程之Android使用FFmpeg so(AP
  3. 滚动条的使用
  4. 安卓开发之控件TextView和EditView
  5. Android剪切板设置和读取字符串String 关
  6. Flutter 修改或者查看pubspec.yaml 导致A
  7. post postinvalidate invalidate
  8. Android题目笔记(二)
  9. android打造的最简单计算器界面
  10. 线程和线程池