2013-12-20 39 views
7

我需要测试我在下面的场景应用:如何模拟Android设备上的网络问题?

  • 连接设备到WiFi(含互联网)。
  • 模拟互联网中断(缺乏互联网,但设备必须保持连接到wifi网络)。
  • 几秒钟后,互联网需要重新激活。

我可以模拟这个拉动adsl电缆走出我的ruter,但然后它不会很快重新连接。 这是以任何方式来模拟这种编程?

+0

很好的问题!我总是用我的路由器来做。但这是一个痛苦的屁股! –

+0

[模拟低带宽在Android]可能的重复(http://stackoverflow.com/questions/8693117/simulate-low-bandwidth-in-android) – starkej2

+0

@ blacksh33p低带宽!=可靠性(数据包丢失,网络中断等) )。这个问题似乎更合适:http://stackoverflow.com/q/130354/489607,但我仍然不认为它是重复的,通过查看这个特定问题的上下文和标签。虽然答案当然是相交的,但这个问题应该/可以激发其他具体的答案。 – davidcesarino

回答

0

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

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

如果你有一台Mac,你可以用Network Link Conditionner来做。这是真正有效的,在这里看到的步骤进行安装:

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

+0

我不明白Mac(或任何其他计算机操作系统)如何涉及这里? – Kristopher

+1

与您的Mac可以共享您的无线连接,将您的设备连接到您的Mac提供的Wifi上。启用网络链接调节器,你去... – Andros

+1

对不起,如果我不够明确,用这个工具,你可以提供非常非常糟糕的网络(如宽松的100%数据包),1秒后,把一个非常好的网络。 – Andros

0

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

+0

我确实有另一个设备,但我能够“禁止互联网”在飞行?不重新连接Wifi? – Kristopher

+0

我相信是这样,就像打开或关闭互联网一样。如果我正确理解你的问题,那就是,我认为是这样。但请记住,如果您创建了热点,则无法在发射设备上使用Wi-Fi,而只能在移动网络上使用。 –

0

尝试通过一个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); 
} 
相关问题