gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:09:09 26 4
gpt4 key购买 nike

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

不是 Wifi,而是 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);
}

这还需要以下权限。

 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

适用于 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);

这需要以下权限:

<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />

请注意,这两个都是非官方的,可能不再有效。由于 2.2 及以下的方法在 2.3 上发生了故障,因此不需要再证明这种事情会被破坏。

关于android - 如何在 Android 上以编程方式关闭 3G/数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12535101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com