如何在Android设备上模拟网络问题?

时间:2013-12-20 11:15:58

标签: android

我需要在以下场景中测试我的应用程序:

  • 将设备连接到wifi(使用互联网)。
  • 模拟互联网中断(缺少互联网,但设备必须保持与wifi网络的连接)。
  • 几秒钟后,互联网需要再次激活。

我可以模拟这将adsl电缆从我的电路中拉出来,但是它不能足够快地重新连接。 这是以编程方式模拟这个吗?

4 个答案:

答案 0 :(得分:3)

如果您有Mac,可以使用网络链接调节器进行操作。它真的很有效,请看这里安装它的步骤:

http://nshipster.com/network-link-conditioner/

答案 1 :(得分:0)

如果您碰巧有其他设备,可以使用它创建热点并禁止移动网络互联网。测试设备将连接到热点,但由于缺少互联网,将无法到达任何地方。至于那里的连接,我认为它比重启路由器更快。但是,你必须有另一种装置来实现这一点......否则我不知道,我也想知道一个真正的答案。

答案 2 :(得分:0)

尝试通过android.os.Handler传递所有网络请求(我也使用db事务)。使用Runnables(更好地实现自己的Runnable类)来实现要执行的操作(在Runnable类中添加回调,日志记录和其他逻辑)。通过这种方式,您可以轻松地在Runnable类中注册侦听器,以执行您感兴趣的睡眠或失败。

以下是我项目中的一些代码。 M_ClientRunnable类实现Runnable,并具有注册" cancellators",失败侦听器和成功侦听器的其他方法。

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);
}

答案 3 :(得分:0)

我还没有真正的解决方案,但我找到了该任务的解决方法。我正在使用MikroTik路由器,其防火墙过滤器允许我在运行中禁用特定IP地址的互联网访问:

6 X chain=forward action=drop protocol=tcp dst-address=192.168.1.20 
 in-interface=Internet(modem)