Android:如何在模拟器中模拟WiFi连接?

35

我想要从我的应用程序中检查设备是否有WiFi连接,但为了做到这一点,我必须首先找到一个方法在模拟器中获取"WiFi"。只是进入Settings -> Wireless controls -> Wifi会显示无法启动Wi-Fi,而logcat则显示:

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连接?


那么你怎么处理这个问题?你解决了吗? - gumuruh
6个回答

20

目前,虽然您可以在模拟器中使用计算机的互联网连接,但模拟 Wi-Fi 使用并不可靠。当您切换/想测试连接状态时,WifiManager 会变得混乱。

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


9

由于这似乎是一个常见问题,我将提供一个更新的答案。SDK仍不支持WiFi仿真,但Genymotion默认支持WiFi,因此您可以使用它来开发/测试具有特定WiFi功能的应用程序。


2
目前只有在授权版本中才是正确的。 - Sebastian Hojas
1
2017年更新,现在在API 25模拟器中可用,当您禁用硬件加速时。 - IT-Dan

5

Android emulator wifi

从26.1.3版本开始,Android模拟器现在支持在Nougat镜像(API 25)上连接WiFi。

向某些系统映像添加了Wi-Fi支持(目前仅支持API级别25)。名为“AndroidWifi”的访问点可用,Android会自动连接它。

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

您可以通过进入模拟器设置(三个点) > 帮助 > 关于来检查模拟器的版本。此外请注意,如果AVD是在版本26.1.3发布之前创建的,则必须重新创建您的AVD。我曾经在某个地方看到过擦除数据也可以解决问题,但我没有尝试过。


1
我需要禁用硬件加速才能使用它。在撰写本文时,将“Emulated Performance Graphics”设置为“Software - GLES 2.0”。 - IT-Dan

4
理论上,Linux(Android底层的内核)有一个名为mac80211_hwsim的驱动程序,它可以模拟WiFi。它可以用于设置多个WiFi设备(接入点、另一个WiFi设备等),这些设备将组成一个WiFi网络。
它对在Linux下测试WiFi程序很有用。可能甚至在user-mode linux或其他带有Linux的隔离虚拟“盒子”中也是如此。
理论上,这个驱动程序可以用于在没有真实WiFi设备(或不想使用它)的Android系统中进行测试,也可以在某些Android模拟器中使用。也许,人们可以设法在Android-x86中使用这个驱动程序,或者在VirtualBox中运行的Android-x86中进行测试。

4
如果没有真实设备,我认为最好的方法是安装android-x86或者在live usb上使用它。android和android-x86之间没有区别。
而且android-x86支持Wi-Fi,所以您可以安装您的应用程序并运行它。

好的...但是它能直接使用吗?我的意思是从那个模拟器(virtualbox)中模拟wifi? :D - gumuruh
截至今天,它不会。 - Sebastian Hojas

2

也许在真实设备上测试没有替代品,但如果您正在模拟器中寻找足够好的测试用例,请尝试Fake Wifi Connection

它使应用程序认为无论底层连接如何,它们都在使用wifi。

免责声明:我编写了这些内容。
它通过拦截ConnectivityManager / WifiManager调用(使用Xposed)来实现。我已经尽力涵盖了大部分内容,因此它的表现相当不错,但仍然可能会有一些遗漏(如果您发现任何问题,请告诉我)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接