8

我想设置一个测试,看看我的代码在没有互联网访问时是否正常工作。有没有办法暂时关闭互联网访问以进行测试?

我试着环顾四周,但找不到。

4

3 回答 3

6

此代码示例应适用于运行姜饼及更高版本的 android 手机:This enable/disable data connection

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"/>

另外,我知道启用或禁用 wifi:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);

根据要求,状态可能为真或假。

同样在清单上:

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
于 2013-04-02T05:28:24.073 回答
2

好吧,要禁用 Wifi,您可以使用以下代码:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true); // "true" TO ENABLE || "false" TO DISABLE

要禁用数据连接,您可以在此处使用解决方案:https ://stackoverflow.com/a/4304110/450534 。但是,此方法不适用于2.3+

这里的答案有一个适用于 2.3+ 和 2.2 及以下版本的解决方案:https ://stackoverflow.com/a/12535246/450534 。您可以进行简单的 API 检查并决定运行哪段代码。这样的事情应该让你设置:

int currentAPIVersion = android.os.Build.VERSION.SDK_INT;
if (currentAPIVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) {
    // RUN THE CODE FOR 2.3+
} else {
    // RUN THE CODE FOR API LEVEL BELOW 2.3
}

看看这两种方法中哪一种适合你。我怀疑,会是后者。不过,我个人从来没有测试过启用或禁用数据连接。

给链接解决方案的作者的道具。;-)

注意: 数据连接解决方​​案基于非官方 API,可能无法在未来的版本中使用。

于 2013-04-02T05:27:07.020 回答
1

DDMS如果您使用的是模拟器,您可以在设置中关闭它的互联网访问。

查看:

  1. 如何在 Android 模拟器中禁用 Internet 连接?
  2. 如何禁用/启用网络,在 Android 模拟器中切换到 Wifi?(关于单元测试的问题)
于 2013-04-02T05:26:58.273 回答