2009-10-13 160 views
30

我想从我的应用程序检查设备是否具有WiFi连接,但为了做到这一点,我必须先找到一种方法在模拟器中获得“WiFi”。只是要设置 - >无线控制 - >无线上网无法启动的WiFi,而logcat说:Android:在模拟器中模拟WiFi?

E/WifiService( 566): Failed to load Wi-Fi driver. 
D/SettingsWifiEnabler( 695): Received wifi state changed from Unknown to Enabling 
D/SettingsWifiEnabler( 695): Received wifi state changed from Enabling to Unknown 

我怎样才能在模拟器模拟WiFi连接?

回答

7

由于这似乎是一个受欢迎的问题,我会继续并添加一个更新的答案。该SDK仍然不支持WiFi仿真,但Genymotion默认为WiFi,因此您可以使用它来开发/测试具有特定WiFi功能的应用。

+2

正确,但仅限于行货版本atm。 –

+0

2017年更新,它现在可以在[API 25模拟器(https://developer.android.com/studio/releases/emulator.html#26-1-3)当您禁用硬件加速 - –

19

目前,虽然您可以在模拟器中使用计算机的Internet连接,但使用它模拟Wi-Fi并不可靠。当您切换/想要测试连接状态时,WifiManager会感到困惑。

即使在Android 1.5中,也存在一些问题(Issue 2571 - android),虽然您可以使用互联网模拟HTTP连接并下载数据,但更好地控制Wi-Fi连接应该更好地使用设备完成。

3

如果您没有真实的设备,我认为最好的方法是安装android-x86或在现场使用USB。 android和android-x86之间没有区别。

And android-x86 support wi-fi。所以你可以安装你的应用程序,并运行它。

+0

好吧......但它的工作原理是什么?我的意思是模拟来自该模拟器(虚拟箱)的无线网络? :D – gumuruh

+0

截至今天,它没有。 –

3

从理论上讲,linux(内核底层android)有mac80211_hwsim驱动程序,它模拟WiFi。它可以用来设置几个WiFi设备(一个接入点,另一个WiFi设备等等),它们将组成一个WiFi网络。

这对测试linux下的WiFi程序很有用。可能,即使在user-mode linux或其他孤立的虚拟“盒子”与Linux。

从理论上讲,这个驱动程序可以在没有真正的WiFi设备(或不想使用它)的android系统中使用,也可以在某些类似的android模拟器中使用。也许,可以设置在android-x86中使用此驱动程序,或者 - 在VirtualBox中运行android-x86中进行测试。

2

也许不能代替真实的设备上测试,但如果你正在寻找在模拟器足够好的测试用例给Fake Wifi Connection一试:

它使应用程序认为他们是在WiFi不管是什么底层的连接是。

免责声明:我写了这个东西。
它通过拦截ConnectivityManager/WifiManager调用工作(使用Xposed)。我试图覆盖他们中的大多数,所以它做得很好,但总是有可能失去一些(如果你发现让我知道的东西)。

4

Android emulator wifi

从版本26.1.3开始,Android模拟器现在支持连接到WiFi牛轧糖图像(API 25)上。

在某些系统映像(当前仅API级别25)中添加了对Wi-Fi的支持。一个名为“AndroidWifi”的接入点可用,Android会自动连接到它。

来源:https://developer.android.com/studio/releases/emulator.html#26-1-3

您可以进入仿真器设置(三个点)>帮助>关于检查仿真器的版本。另请注意,如果在版本26.1.3发布之前创建了AVD,则必须重新创建AVD。我在某处读取擦除数据也可能会起作用,但我没有尝试过。

+0

我需要禁用硬件加速使其可用。在编写时将'Emulated Performance Graphics'设置为'Software - GLES 2.0'。 –