我需要测试我在下面的场景应用:如何模拟Android设备上的网络问题?
- 连接设备到WiFi(含互联网)。
- 模拟互联网中断(缺乏互联网,但设备必须保持连接到wifi网络)。
- 几秒钟后,互联网需要重新激活。
我可以模拟这个拉动adsl电缆走出我的ruter,但然后它不会很快重新连接。 这是以任何方式来模拟这种编程?
我需要测试我在下面的场景应用:如何模拟Android设备上的网络问题?
我可以模拟这个拉动adsl电缆走出我的ruter,但然后它不会很快重新连接。 这是以任何方式来模拟这种编程?
我还没有一个真正的解决方案,但我找到了一个任务的解决方法。我正在使用MikroTik路由器,它的防火墙过滤器允许我禁用特定IP地址的网络访问:
6 X chain=forward action=drop protocol=tcp dst-address=192.168.1.20
in-interface=Internet(modem)
如果你有一台Mac,你可以用Network Link Conditionner来做。这是真正有效的,在这里看到的步骤进行安装:
我不明白Mac(或任何其他计算机操作系统)如何涉及这里? – Kristopher
与您的Mac可以共享您的无线连接,将您的设备连接到您的Mac提供的Wifi上。启用网络链接调节器,你去... – Andros
对不起,如果我不够明确,用这个工具,你可以提供非常非常糟糕的网络(如宽松的100%数据包),1秒后,把一个非常好的网络。 – Andros
如果你碰巧有其他设备,您可以使用它创建一个热点,并禁止移动网络上网。测试设备将连接到热点,但由于缺乏互联网而无法到达任何地方。至于那里的连接,我认为它比重新启动路由器更快。但是,你必须有另一个设备才能发生这种情况......否则我不知道,我也想知道一个真实的答案。
我确实有另一个设备,但我能够“禁止互联网”在飞行?不重新连接Wifi? – Kristopher
我相信是这样,就像打开或关闭互联网一样。如果我正确理解你的问题,那就是,我认为是这样。但请记住,如果您创建了热点,则无法在发射设备上使用Wi-Fi,而只能在移动网络上使用。 –
尝试通过一个android.os.Handler传递所有的网络请求(我用它与数据库交易)。使用Runnables(更好地实现自己的Runnable类)来实现要执行的动作(在Runnable类中添加回调,日志记录和其他逻辑)。这样,您可以轻松地在您的Runnable类中注册监听器,以便执行您感兴趣的任何睡眠或失败。
以下是我的项目中的一些代码。 M_ClientRunnable类实现Runnable,并具有注册“取消器”,失败侦听器和成功侦听器的其他方法。
class LooperThread extends Thread {
public Handler mHandler;
public LooperThread() {
super();
start();
}
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
getLogger().info(TAG, msg.toString());
}
};
Looper.loop();
}
public boolean post(M_ClientRunnable runnable) {
if(!isAlive()) {
start();
}
if (mHandler!=null) {
return mHandler.post(runnable);
} else {
return false;
}
}
};
private LooperThread looper = new LooperThread();
@Override
public boolean post(M_ClientRunnable runnable) {
return looper.post(runnable);
}
很好的问题!我总是用我的路由器来做。但这是一个痛苦的屁股! –
[模拟低带宽在Android]可能的重复(http://stackoverflow.com/questions/8693117/simulate-low-bandwidth-in-android) – starkej2
@ blacksh33p低带宽!=可靠性(数据包丢失,网络中断等) )。这个问题似乎更合适:http://stackoverflow.com/q/130354/489607,但我仍然不认为它是重复的,通过查看这个特定问题的上下文和标签。虽然答案当然是相交的,但这个问题应该/可以激发其他具体的答案。 – davidcesarino