Android:在模拟器中模拟WiFi?

我想从我的应用程序检查设备是否具有WiFi连接,但为了做到这一点,我必须首先find一种方法来在模拟器中获得“WiFi”。 只要去设置 – >无线控制 – > 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连接?

目前,虽然您可以在模拟器中使用电脑的互联网连接,但使用它来模拟Wi-Fi并不可靠。 当您切换/想要testing您的连接状态时, WifiManager会感到困惑。

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

由于这似乎是一个受欢迎的问题,我会继续并添加一个更新的答案。 SDK仍然不支持WiFi仿真,但是Genymotion默认使用WiFi,所以你可以使用它开发/testing具有特定WiFifunction的应用程序。

从理论上讲,linux(内核下的android)有mac80211_hwsim驱动,它模拟WiFi。 它可以用来设置几个WiFi设备(一个接入点,另一个WiFi设备等等),这将组成一个WiFinetworking。

这在linux下testingWiFi程序很有用。 可能,即使在用户模式的Linux或其他孤立的虚拟“盒”与Linux。

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

Android模拟器的WiFi

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

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

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

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

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

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

在真实设备上进行testing可能不会替代,但是如果您在模拟器中寻找足够好的testing用例,请尝试以下方法:

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

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