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服务,会被系统拦截,这也是报错的潜在诱因。
解决步骤
修改Shelf服务器绑定地址
将服务器绑定到0.0.0.0,让它监听设备上所有可用的网络接口,包括局域网IP:// 替换原有的serve代码 await shelf_io.serve(handler, '0.0.0.0', 8080);配置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>
- 在Android项目的
验证IP地址正确性
打印日志确认hostAddress获取到的是设备正确的局域网IP(格式应为192.168.x.x):print('设备局域网IP: $hostAddress');
补充说明
Windows平台能正常运行,是因为桌面系统对明文HTTP的限制更宽松,且localhost与局域网IP的网络接口监听逻辑没有Android这么严格。
内容的提问来源于stack exchange,提问作者Michael Handl
相关产品推荐
相关产品推荐

