android 工程 关闭 3g,如何在Android上以编程方式关闭3G /数据?

没有官方的方法可以做到这一点。但是,可以通过反射非正式地实现。

对于Android 2.3及更高版本:

private void setMobileDataEnabled(Context context, boolean enabled) {

final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

final Class conmanClass = Class.forName(conman.getClass().getName());

final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");

iConnectivityManagerField.setAccessible(true);

final Object iConnectivityManager = iConnectivityManagerField.get(conman);

final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());

final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);

setMobileDataEnabledMethod.setAccessible(true);

setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);

}

这还需要以下许可。

对于Android 2.2及以下版本:

Method dataConnSwitchmethod;

Class telephonyManagerClass;

Object ITelephonyStub;

Class ITelephonyClass;

TelephonyManager telephonyManager = (TelephonyManager) context

.getSystemService(Context.TELEPHONY_SERVICE);

if(telephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED){

isEnabled = true;

}else{

isEnabled = false;

}

telephonyManagerClass = Class.forName(telephonyManager.getClass().getName());

Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony");

getITelephonyMethod.setAccessible(true);

ITelephonyStub = getITelephonyMethod.invoke(telephonyManager);

ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName());

if (isEnabled) {

dataConnSwitchmethod = ITelephonyClass

.getDeclaredMethod("disableDataConnectivity");

} else {

dataConnSwitchmethod = ITelephonyClass

.getDeclaredMethod("enableDataConnectivity");

}

dataConnSwitchmethod.setAccessible(true);

dataConnSwitchmethod.invoke(ITelephonyStub);

这需要以下权限:

请注意,这两者都是非官方的,可能不再起作用。由于2.2及以下版本的方法在2.3上出现了中断,因此不再需要这种事情发生的证明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值