通常是采用加后缀法关闭APN,即在APN信息表(content://telephony/carriers/current )的apn, type字段添加自定义的后缀(参考自APNDroid )。但实际上Android已经提供了开/关数据业务的方法,只是设置为@hidden,没有提供给SDK。
2.1 在com.android.internal.telephony.ITelephony接口里提供的以下方法
boolean
enableDataConnectivity()
Allow mobile data connections.
boolean
disableDataConnectivity()
Disallow mobile data connections.
这两个方法是隐藏的,不能直接调用。可以使用如下两种方法:
- 反射
- 自行编译framework.jar,把这个jar包加入工程的classpath,直接调用。
对于第二种方法,使用如下代码获得接口实现类的实例
1: ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.getService("phone"));
需要权限
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
2.2 开始 在android.net.ConnectivityManager类里提供了以下方法
boolean
getMobileDataEnabled()
Gets the value of the setting for enabling Mobile data.
void
setMobileDataEnabled(boolean enabled)
# 更新说明:该方法在 Android 5.0 API 21 中已移除
Sets the persisted value for enabling/disabling Mobile data.
不幸的是这两个方法依然是隐藏的。调用方法如前所叙述。
需要权限
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>