解决办法中使用到了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使用JDBC连接mysql数据库
  2. android:weight的使用
  3. Android(安卓)SDK 快速安装方法
  4. 另一个更简单的Android应用程序全屏的方法
  5. 拖动条SeekBar的简单使用
  6. android里面的USB功能-----Accessory模式
  7. 源码解析Android中AsyncTask的工作原理
  8. Android(安卓)Studio系列(二)使用Android(安卓)Studio开发/调试整
  9. Android(安卓)Studio开发基础之AutoCompleteTextView控件的使用

随机推荐

  1. android ------实现高德定位并获取相应信
  2. android中activity的四种加载模式
  3. App与Js交互(二)Android
  4. Android上使用ksoap2支持Web Service服务
  5. Android(安卓)中LayoutInflater(布局加载
  6. android读写assets目录下面的资源文件(文
  7. Android(安卓)笔记 01
  8. Android(安卓)彻底关闭----退出程序
  9. Android(安卓)java.io.IOException异常情
  10. Anbox:在 Linux 上运行 Android(安卓)应用