三星S23/Z Fold5机型Flutter应用网络检测异常求助
解决方案
针对你在三星S23、Galaxy Z Fold5的Release APK中网络检测异常的问题,可按以下步骤排查修复:
1. 修正代码结构,将DNS解析操作放入try块
你当前的代码把InternetAddress.lookup放在了try块外部,一旦解析失败会直接抛出异常,无法被后续的catch捕获。调整代码如下:
try { final result = await InternetAddress.lookup('example.com'); if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) { Get.snackbar('Internet', 'Navigate to Internet'); } else { Get.snackbar('No Internet', 'Navigate to No Internet'); } } on SocketException catch (_) { Get.snackbar('No Internet', 'SocketException'); }
2. 添加网络状态权限
仅INTERNET权限可能不足以在部分三星设备上正常检测网络,需在AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3. 改用实际Socket连接检测(更可靠)
DNS解析成功不代表实际网络可连通,部分三星设备的Release模式下可能存在DNS缓存或系统限制,建议替换为直接建立Socket连接的方式:
try { // 连接example.com的443端口(HTTPS默认端口),设置5秒超时 final socket = await Socket.connect('example.com', 443, timeout: const Duration(seconds: 5)); socket.close(); Get.snackbar('Internet', 'Navigate to Internet'); } on SocketException catch (_) { Get.snackbar('No Internet', 'SocketException'); }
4. 配置Android网络安全策略
部分三星设备对网络请求有严格的安全限制,可添加网络安全配置文件:
- 在
res/xml目录下创建network_security_config.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">example.com</domain> </domain-config> </network-security-config>
- 在
AndroidManifest.xml的application标签中引用该配置:
<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
5. 排查Release模式构建配置
若开启了代码混淆或资源压缩,可能意外影响网络相关逻辑,可临时关闭测试(不建议长期关闭,测试后需恢复):
在android/app/build.gradle的release构建类型中修改:
buildTypes { release { minifyEnabled false shrinkResources false signingConfig signingConfigs.release } }
内容的提问来源于stack exchange,提问作者Ashraful Alam
相关产品推荐
相关产品推荐

