首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android移动数据下网的开关的实现

2013-03-10 
android移动数据上网的开关的实现本帖最后由 CSDN_Ask 于 2013-01-10 11:20:25 编辑解决办法中使用到了Con

android移动数据上网的开关的实现
本帖最后由 CSDN_Ask 于 2013-01-10 11:20:25 编辑 解决办法中使用到了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;
}

@Deprecated
public boolean getBackgroundDataSetting()
{
    return true;
}

@Deprecated
public 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;
}
}

android
[解决办法]
C语言。。观望
[解决办法]
挣分来的
不为别的。
[解决办法]
感谢楼主,找到了。
只引入一个包就就行了吗?
[解决办法]
很好很强大!
------解决方案--------------------


我觉得其实是少个调用的问题
[解决办法]
很好,谢谢楼主分享
[解决办法]
package import
[解决办法]
赞一个得点分分享更好的东西
[解决办法]
楼主牛人啊    啊
[解决办法]
厉害。。。。。。android移动数据下网的开关的实现
[解决办法]
android移动数据上网的开关的实现,我收集了一些资料,进行了整理,现阶段测试没什么问题,大家可以来看下android移动数据下网的开关的实现
http://blog.csdn.net/tibib/article/details/8469871
[解决办法]
支持牛人作品
[解决办法]
好牛!!!膜拜!!!
[解决办法]
is it working. I am keeping it. 
[解决办法]
貌似可以使用放射来实现开工移动数据。
[解决办法]
android移动数据下网的开关的实现
[解决办法]
谢谢分享。。。。
[解决办法]
顶一个,很好的分享。android移动数据下网的开关的实现
[解决办法]
setMobileDataEnable()、getMobileDataEnable()在SDK中没有是因为源码设置为hide。
楼主可以直接在源码下开发程序,然后make,这样即使为hide 方法,你直接用也可以编译过去。
[解决办法]
用反射机制可以实现,也可以把源码编译后的SDK提取出来供app使用。

热点排行