连接到离线 Wi-Fi 并继续使用移动数据(也适用于所有其他应用程序)

Ale*_*ann 5 android android-wifi

我有一个应用程序需要通过 Wi-Fi 连接到硬件。为此,硬件提供了离线 Wi-Fi 热点。热点的 DHCP 不为我们提供网关或 DNS,因此我们立即知道它仅供离线使用。

最终用户在工作时必须始终保持 Wi-Fi 连接,以便接收传感器数据并在数据出现问题时发出警报。但与此同时,我们不想强迫最终用户的移动设备离线。他应该能够将他的移动数据用于我们和他拥有的所有其他应用程序。

我虽然可以通过调用android.net.ConnectivityManager.requestNetwork来控制它。但它似乎工作不可靠。如果所有其他应用程序都可以访问移动数据,在我的应用程序requestNetwork中调用是否会影响?

这是我们可以控制的吗?我在不同制造商和 Android 版本的多台设备上进行了测试,它们的行为都不同。

例如 Pixel 3a 运行良好。一段时间后,我收到有关 Wi-Fi 离线的通知。如果我忽略它,它就会继续工作。如果我按“是”,我将处于离线状态并连接到 Wi-Fi。

华为 P20 Lite 似乎每次我请求时都会OnLost为我的移动数据触发一个事件。NetworkCallback就像每次我重新连接时它都会尝试取消移动连接,因为我在 wifi 中。某些设备提供“智能开关”(三星)或“Wi-Fi+”(华为)模式,但默认情况下并未启用。要求用户打开它似乎很麻烦,因为他们可能不想在不同的场景中使用它。

以下是不同设备的一些示例: 在此输入图像描述

Ale*_*ann 1

在各种设备上进行尝试后,我可以说,不可能在所有设备上一致地实现所需的行为。几乎所有设备的行为都不同。操作系统版本并不是真正的因素。这更多地取决于供应商如何处理用户连接到离线 WiFi 的情况。

根据设备的不同,所有应用程序可能会保持与离线 WiFi 的连接并同时使用移动数据。但操作系统可以自动断开您的连接或将您锁定到离线 WiFi 并禁用移动数据。也许是因为用户在系统对话框中选择了一个选项,如上所示。

在后一种情况下,可以强制与自己的应用程序建立移动ConnectivityManager数据连接。但不可能让所有其他应用程序也使用此移动连接。