我想设置一个测试,看看我的代码在没有互联网访问时是否正常工作。有没有办法暂时关闭互联网访问以进行测试?
我试着环顾四周,但找不到。
此代码示例应适用于运行姜饼及更高版本的 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" />
好吧,要禁用 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,可能无法在未来的版本中使用。
DDMS
如果您使用的是模拟器,您可以在设置中关闭它的互联网访问。
查看: