浓缩咖啡:切换网络状态



我目前正在开发一个涵盖离线功能的浓缩咖啡测试套件。为了实施这些测试,我需要创建一个可以调用以打开/关闭网络连接的方法。到目前为止,我已经能够切换WiFi,但是我无法弄清楚如何关闭蜂窝数据。

任何信息都非常感谢。

这个解决方案对我有用: https://sqa.stackexchange.com/questions/23646/how-can-i-switch-on-off-airplane-mode-and-wifi-using-appium?answertab=votes#tab-top

您还可以执行非常卡顿的解决方法。 注意:我这样做主要是为了好玩,不宣传实际使用;)

#!/bin/bash
### SET Airplane Mode ON ###
adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS 
&& for i in {1..5}
do 
adb shell input keyevent 20
done 
&& adb shell input keyevent 23 
&& adb shell input keyevent 4;
### Run tests ###
### SET Airplane Mode OFF ###
# NOTE: When Airplane Mode is enabled in API 28, "Mobile network" is disabled. Additionally, since Android Setting's Network & internet 
# is still running in the background, you'll have to select the down action two less times. 
adb shell am start -a android.settings.AIRPLANE_MODE_SETTINGS 
&& for i in {1..3}
do 
adb shell input keyevent 20
done 
&& adb shell input keyevent 23 
&& adb shell input keyevent 4;

从@zzz尝试此解决方案

(请在 https://stackoverflow.com/a/53414845/191761 上对他们的回答投赞成票(

public static void setMobileDataEnabled(Context context, boolean enabled) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
final ConnectivityManager conman = (ConnectivityManager)  context.getSystemService(Context.CONNECTIVITY_SERVICE);
final Class conmanClass = Class.forName(conman.getClass().getName());
final Field connectivityManagerField = conmanClass.getDeclaredField("mService");
connectivityManagerField.setAccessible(true);
final Object connectivityManager = connectivityManagerField.get(conman);
final Class connectivityManagerClass =  Class.forName(connectivityManager.getClass().getName());
final Method setMobileDataEnabledMethod = connectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(connectivityManager, enabled);
}

@Illyct的另一个想法可以通过外壳关闭WiFi和移动数据:

InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc wifi disable")
InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("svc data disable")

我测试了它,它对我有用。

如果您觉得有用,请在 https://stackoverflow.com/a/64765567/191761 对他们的答案投赞成票

最新更新