【问题标题】:Flutter/Dart force request to use wifi, even with no internetFlutter/Dart 强制请求使用 wifi,即使没有互联网
【发布时间】:2022-01-27 11:39:03
【问题描述】:

我在 Android 10 (APK 29) 上的颤振应用程序使用 flutter_wifi_connect 插件 (https://pub.dev/packages/flutter_wifi_connect) 连接到没有互联网的 wifi 设备。该插件使用 Android WifiNetworkSpecifier API。我也同时连接到蜂窝网络。

我正在向本地网络设备发送请求(在 URL 中使用 IP 地址),但它随机失败。

我怀疑 Android 有时会尝试使用蜂窝网络而不是 wifi。

触发请求

final response = await http.get(
    Uri.parse('http://192.168.174.117:8080/api/test'),
);

给我以下错误,但只是有时。有时它会起作用。

I/flutter (27829): SocketException: OS Error: No route to host, errno = 113, address = 192.168.174.117, port = 38166

如果我手动关闭移动数据,它每次都有效。

我尝试了另一个插件wifi_iot (https://pub.dev/packages/wifi_iot) 并在请求之前添加了这个

await WiFiForIoTPlugin.forceWifiUsage(true);

但没有运气。

我将颤振更新到 2.1.0.-11.0.pre.122,没有帮助。

用户可以选择重新发送请求,因此最终它会起作用,但这是糟糕的用户体验,我不能让它这样。

有什么方法可以强制使用 wifi 处理特​​定请求(或强制不使用蜂窝网络处理特定请求)?应用程序的工作方式是与提供 wifi 的 wifi 设备进行通信,但也需要通过蜂窝网络连接到互联网。

【问题讨论】:

    标签: android flutter dart wifi


    【解决方案1】:

    wifi_iothttp 包对我有用。还有一个问题是只有通过android UI关闭移动数据才能进行http调用。

    我发现在与WiFiForIoTPlugin.connect() 连接后,需要调用WiFiForIoTPlugin.forceWifiUsage(true) - 然后进行 HTTP 调用,即使移动数据已激活。

    为了保持一切正常,您可以致电 断开连接前:

    WiFiForIoTPlugin.forceWifiUsage(false);
    

    然后断开

    再次连接到另一个 Wifi 或默认

    WiFiForIoTPlugin.forceWifiUsage(true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 2015-01-02
      • 2019-04-23
      • 2016-12-30
      • 2019-08-19
      • 1970-01-01
      • 2020-12-09
      相关资源
      最近更新 更多