解决办法中使用到了ConnectivityManager类,但是在SDK中的ConnectivityManager类并没有提供setMobileDataEnable()、getMobileDataEnable()等方法。也看了ConnectivityManager类的源码,里面都是有这些方法的。弄了大半天,最终狠下心来,自己写个ConnectivityManager类,其中的方法和源ConnectivityManager类的方法一样,但都是空实现,编译成ConnectivityManager.class文件,然后替换android.jar包中的android.net.ConnectivityManager.class文件。然后在项目中,使用ConnectivityManager的setMobileDataEnable()方法来打开和关闭数据上网,使用getMobileDataEnable()方法获得当前连接状态,当然这需要android.permission.CHANGE_NETWORK_STATE和android.permission.ACCESS_NETWORK_STATE权限。

原解决方案来自于CSDN问答,更多解决方案见http://ask.csdn.net/questions/152

ConnectivityManager类如下:

package android.net;import java.net.InetAddress;public class ConnectivityManager{public static final String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";public static final String CONNECTIVITY_ACTION_IMMEDIATE = "android.net.conn.CONNECTIVITY_CHANGE_IMMEDIATE";public static final String EXTRA_NETWORK_INFO = "networkInfo";public static final String EXTRA_IS_FAILOVER = "isFailover";public static final String EXTRA_OTHER_NETWORK_INFO = "otherNetwork";public static final String EXTRA_NO_CONNECTIVITY = "noConnectivity";public static final String EXTRA_REASON = "reason";public static final String EXTRA_EXTRA_INFO = "extraInfo";public static final String EXTRA_INET_CONDITION = "inetCondition";public static final String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";public static final String INET_CONDITION_ACTION = "android.net.conn.INET_CONDITION_ACTION";public static final String ACTION_TETHER_STATE_CHANGED = "android.net.conn.TETHER_STATE_CHANGED";public static final String EXTRA_AVAILABLE_TETHER = "availableArray";public static final String EXTRA_ACTIVE_TETHER = "activeArray";public static final String EXTRA_ERRORED_TETHER = "erroredArray";public static final int TYPE_NONE = -1;public static final int TYPE_MOBILE = 0;public static final int TYPE_WIFI = 1;public static final int TYPE_MOBILE_MMS = 2;public static final int TYPE_MOBILE_SUPL = 3;public static final int TYPE_MOBILE_DUN = 4;public static final int TYPE_MOBILE_HIPRI = 5;public static final int TYPE_WIMAX = 6;public static final int TYPE_BLUETOOTH = 7;public static final int TYPE_DUMMY = 8;public static final int TYPE_ETHERNET = 9;public static final int TYPE_MOBILE_FOTA = 10;public static final int TYPE_MOBILE_IMS = 11;public static final int TYPE_MOBILE_CBS = 12;public static final int TYPE_WIFI_P2P = 13;public static final int MAX_RADIO_TYPE = TYPE_WIFI_P2P;public static final int MAX_NETWORK_TYPE = TYPE_WIFI_P2P;public static final int DEFAULT_NETWORK_PREFERENCE = TYPE_WIFI;public static boolean isNetworkTypeValid(int networkType){    return networkType >= 0 && networkType <= MAX_NETWORK_TYPE;}/** {@hide} */public static String getNetworkTypeName(int type){    return Integer.toString(type);}/** {@hide} */public static boolean isNetworkTypeMobile(int networkType){    return false;}public void setNetworkPreference(int preference){}public int getNetworkPreference(){    return 0;}class NetworkInfo{}public NetworkInfo getActiveNetworkInfo(){    return null;}/** {@hide} */public NetworkInfo getActiveNetworkInfoForUid(int uid){    return null;}public NetworkInfo getNetworkInfo(int networkType){    return null;}public NetworkInfo[] getAllNetworkInfo(){    return null;}/** {@hide} */public LinkProperties getActiveLinkProperties(){    return null;}/** {@hide} */public LinkProperties getLinkProperties(int networkType){    return null;}/** {@hide} */public boolean setRadios(boolean turnOn){    return turnOn;}/** {@hide} */public boolean setRadio(int networkType, boolean turnOn){    return turnOn;}public int startUsingNetworkFeature(int networkType, String feature){    return networkType;}public int stopUsingNetworkFeature(int networkType, String feature){    return networkType;}public boolean requestRouteToHost(int networkType, int hostAddress){    return false;}public boolean requestRouteToHostAddress(int networkType,        InetAddress hostAddress){    return false;}@Deprecatedpublic boolean getBackgroundDataSetting(){    return true;}@Deprecatedpublic void setBackgroundDataSetting(boolean allowBackgroundData){}public NetworkQuotaInfo getActiveNetworkQuotaInfo(){    return null;}public boolean getMobileDataEnabled(){    return false;}public void setMobileDataEnabled(boolean enabled){}class Context{}public static ConnectivityManager from(Context context){    return new ConnectivityManager();}public String[] getTetherableIfaces(){    return null;}public String[] getTetheredIfaces(){    return null;}public String[] getTetheringErroredIfaces(){    return null;}public int tether(String iface){    return 0;}public int untether(String iface){    return 0;}public boolean isTetheringSupported(){    return false;}public String[] getTetherableUsbRegexs(){    return null;}public String[] getTetherableWifiRegexs(){    return null;}public String[] getTetherableBluetoothRegexs(){    return null;}public int setUsbTethering(boolean enable){    return 0;}/** {@hide} */public static final int TETHER_ERROR_NO_ERROR = 0;/** {@hide} */public static final int TETHER_ERROR_UNKNOWN_IFACE = 1;/** {@hide} */public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2;/** {@hide} */public static final int TETHER_ERROR_UNSUPPORTED = 3;/** {@hide} */public static final int TETHER_ERROR_UNAVAIL_IFACE = 4;/** {@hide} */public static final int TETHER_ERROR_MASTER_ERROR = 5;/** {@hide} */public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6;/** {@hide} */public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7;/** {@hide} */public static final int TETHER_ERROR_ENABLE_NAT_ERROR = 8;/** {@hide} */public static final int TETHER_ERROR_DISABLE_NAT_ERROR = 9;/** {@hide} */public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10;public int getLastTetherError(String iface){    return 0;}public boolean requestNetworkTransitionWakelock(String forWhom){    return false;}public void reportInetCondition(int networkType, int percentage){}class PointerProperties{}public void setGlobalProxy(PointerProperties p){}public PointerProperties getGlobalProxy(){    return null;}public PointerProperties getProxy(){    return null;}public void setDataDependency(int networkType, boolean met){}public boolean isNetworkSupported(int networkType){    return false;}public boolean isActiveNetworkMetered(){    return false;}}



更多相关文章

  1. android listview继承BaseAdapter,自定义的适配器,getView方法执
  2. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜
  3. android 布局文件属性说明
  4. Android 属性文件build.prop,获取属性以及设置属性
  5. 另一个更简单的Android应用程序全屏的方法
  6. Android获取打开各种文件Intent汇总
  7. Android中javax annotation Nullable找不到的解决方案
  8. Android 使用PdfDocument生成PDF文件及遇到的问题

随机推荐

  1. android 使用uinput模拟输入设备的方法
  2. Android中AIDL的使用详解
  3. Android的ScrollView简单使用实例(附Demo
  4. Android实现3秒钟自动关闭界面
  5. Android(安卓)按钮快速点击问题的解决方
  6. Android(安卓)studio JNI中快速生成头文
  7. Android(安卓)Studio 设置自动配置git忽
  8. 【android】轻松集成支付包支付
  9. 利用 Android(安卓)Studio 和 Gradle 打
  10. Please ensure that adb is correctly lo