如何在Android 8.0中以编程方式关闭4G /数据?
不是Wifi上网,而是4G /数据。
运行以下源将关闭设备。
public void onClick(View view){
ConnectivityManager dataManager;
dataManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
Method dataMtd = null;
try {
dataMtd = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dataMtd.setAccessible(true);
try {
dataMtd.invoke(dataManager, true);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:0)
实际上,由于Android 5.0 Lollipop,您无法再启用或禁用4G /电话数据。 无论如何,对于以前的版本,仅在有根设备this solution 上有效。
要禁用WiFi,此代码应起作用:
WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);
第二个位置的“状态”应为true / false。
答案 1 :(得分:0)
您需要启动设备,使用TelephonyManager
代替ConnectivityManager
,并添加MODIFY_PHONE_STATE
的权限。
答案 2 :(得分:0)
以下代码在Kotlin上对我有用:
fun disable4GNetwork(context: Context) {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val request: NetworkRequest.Builder?
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
request = NetworkRequest.Builder()
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
connectivityManager.requestNetwork(
request.build(),
object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ConnectivityManager.setProcessDefaultNetwork(network)
}
}
}
)
}
}