将 Android 应用程序连接到没有互联网访问权限的 wifi

Mat*_*tic 14 iot react-native expo

我有一个 expo 应用程序,它可以作为 IoT 设备的配套应用程序。

要将设备连接到 wifi,应用程序必须连接到设备的 wifi 并向其发送包含 wifi 信息的网络调用。

直到 Android 9,这工作正常。但是当我开始在较新的设备上进行测试时,我发现这不像以前那么顺利,就像现在如果您连接到没有互联网访问权限的 wifi,您会收到一条消息说“这个网络没有互联网访问权限。保持连接?” . 理想情况下,用户现在必须在网络呼叫发送到设备之前选择“不再询问”并选择“是”。

如果用户错过了这个弹出窗口,或者关闭它,网络请求不会通过,因为 Android 阻止所有数据传输,直到您专门为弹出窗口选择“是”,这有点糟糕 UX。如果用户错过了弹出窗口,他们仍然可以看到“此 wifi 无法访问互联网”的通知以访问弹出窗口。

所以,问题是:有没有办法绕过这个?理想情况下,我可以事先询问用户的权限?到目前为止我还没有发现任何东西,除了这个问题Force Android to Use Wifi network with no internet that is similar wifi和应用程序。虽然在 iOS 上运行良好:/

小智 9

不是解决方案,但我们遇到了完全相同的问题。在 Android 9 之前,我们的应用程序能够在没有互联网的情况下连接到 WIFI 网络并传递流量。从 9 开始,我们可以在没有互联网的情况下连接到 wifi 网络,但所有流量都是通过移动数据发送的。

当我们手动将 android 9 设备连接到没有互联网的 WIFI 网络时,我们会看到一个弹出通知:互联网可能不可用。有两种选择 - 1) 切换到移动数据或 2) 另一个网络。如果我们选择任一选项,我们将在没有互联网的情况下与 wifi 网络断开连接。如果我们什么都不做(两个选项都不选)并让弹出窗口在 10 秒后消失,我们将在没有互联网的情况下保持与 wifi 网络的连接。

当我们从应用程序内部连接时,不会向用户显示弹出窗口,行为就像我们选择了“切换到移动数据”选项一样。

如果 android 团队不认为在每种情况下都需要或需要互联网,那就太好了。有时,我们希望在没有互联网访问的情况下连接到网络并保持连接。

一种可能的解决方案是禁用移动数据。虽然这有效,但在程序上似乎不允许这样做。在我们的例子中,这将要求用户每天多次在设置中启用/禁用移动数据。现在,我们的应用程序从各种非互联网 wifi 网络获取数据,然后断开与 wifi 网络的连接,通过互联网将该数据发送到云服务器。

关于如何在最新版本的 Android 中解决的任何想法?