You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Android端Webview调用NetworkInfo出现ERR_CONNECTION_REFUSED问题

问题原因及解决方案

核心原因

你遇到的问题主要来自两个关键点:

  • Shelf服务器绑定范围限制:如果你的Shelf服务器默认绑定的是localhost(即127.0.0.1),它只会监听设备的回环网络接口,仅接受本地进程的请求(比如用http://localhost:8080访问)。当你用设备的局域网IP(如192.168.x.x)访问时,请求是通过WiFi/移动网络接口发送的,服务器没监听这个接口,因此会直接拒绝连接。
  • Android明文HTTP拦截规则:Android 9(API 28)及以上版本默认禁止应用发起明文HTTP请求,仅允许HTTPS。你用设备IP访问的是HTTP服务,会被系统拦截,这也是报错的潜在诱因。

解决步骤

  1. 修改Shelf服务器绑定地址
    将服务器绑定到0.0.0.0,让它监听设备上所有可用的网络接口,包括局域网IP:

    // 替换原有的serve代码
    await shelf_io.serve(handler, '0.0.0.0', 8080);
    
  2. 配置Android网络安全策略(允许明文HTTP)

    • 在Android项目的res/xml目录下创建network_security_config.xml文件(无xml目录则新建),内容如下:
      <?xml version="1.0" encoding="utf-8"?>
      <network-security-config>
          <domain-config cleartextTrafficPermitted="true">
              <!-- 允许localhost的明文请求 -->
              <domain includeSubdomains="true">localhost</domain>
              <!-- 允许局域网IP段的明文请求,示例为192.168.x.x段 -->
              <domain includeSubdomains="true">192.168.0.0/24</domain>
          </domain-config>
      </network-security-config>
      
    • 在AndroidManifest.xml的application标签中添加配置引用:
      <application
          ...
          android:networkSecurityConfig="@xml/network_security_config">
          ...
      </application>
      
  3. 验证IP地址正确性
    打印日志确认hostAddress获取到的是设备正确的局域网IP(格式应为192.168.x.x):

    print('设备局域网IP: $hostAddress');
    

补充说明

Windows平台能正常运行,是因为桌面系统对明文HTTP的限制更宽松,且localhost与局域网IP的网络接口监听逻辑没有Android这么严格。

内容的提问来源于stack exchange,提问作者Michael Handl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:35:10