android - Flutter 连接错误回调
问题描述
我使用连接包来跟踪用户连接更改。这个想法是在 ConnectivityResult 为无(又名 wifi 和移动设备已断开连接)时弹出连接丢失的警告页面。但相反,我得到了这些结果:如果 wifi 已连接并且您断开它,则 50% 的时间会弹出警告。如果您在移动设备上并将其关闭,则连接返回该用户仍在 ConnectivityResult.mobile 而不是 ConnectivityResult.none。
试图通过 ping google 进行双重检查,但即使这样也没有我预期的那么顺利。
我的代码:我创建了带有函数的单独文件:
void trackNetworkStatus(BuildContext ctx) {
//check in case state is just opened
pingGoogle(ctx);
//add network listener
Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
print("Network changed to $result");
//if user lost connection
if (result == ConnectivityResult.none) {
openNoInternetScreen(ctx);
}else{
//if user has connection, doublecheck
//mobile network is tricky on android
pingGoogle(ctx);
}
});
}
Future<void> pingGoogle(BuildContext ctx) async {
try {
//ping internet page
final result = await InternetAddress.lookup('google.com');
//if ping is successful
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
print('connected');
}else{
print('not connected');
openNoInternetScreen(ctx);
}
} on SocketException catch (_) {
print('not connected');
openNoInternetScreen(ctx);
}
}
void openNoInternetScreen(BuildContext ctx) {
Navigator.push(
ctx,
MaterialPageRoute(builder: (context) => noInternetPage()),
);
}
因为我在每个应用程序初始化时都像这样调用它们:
@override
void initState() {
super.initState();
//listen to netwoek changes
trackNetworkStatus(context);
}
这会导致有时警告页面会弹出两次的问题,因为我相信之前的侦听器尚未停止,但我可以弄清楚如何解决它。问题是为什么连接包在移动设备上返回错误回调。我在虚拟 Android API 23 和三星 S9+ 上进行了测试,两者的结果相同。
解决方案
我把我的应用程序给了几个早期的测试人员,结果对他们来说一切都很好,即使他们中的一些人也拥有三星设备。看起来连接包完全没有问题,一些三星手机只是表现得很奇怪,因为它们不应该。看起来整个社区中总会有一只害群之马,可悲的是我和我是这个有问题的设备的开发人员。
Havent 找到了我的设备的修复程序,但看起来该软件包对于市场上的大多数设备来说都是安全的。
奇怪的手机型号:SM-G965F。
推荐阅读
- c++ - 如何在卡萨布兰卡为外部连接设置 listener() 设置?
- java - 类文件的版本错误
- c++ - 为什么当我声明复制初始值设定项被删除时,使用等于运算符的声明是错误的
- android - android studio 3.4.1 的 Jarsigner 问题
- java - 从下向上动画片段,在上一个片段之上
- regex - 正则表达式从选择中排除空格
- kubernetes - Is it possible to know if the node where a Kubernetes Pod is being scheduled is master or worker?
- c# - 使用 XElement 和 XNamespace C# 类创建 Xml 属性 json:Array
- ios - 我删除了 CFBundleDocumentType。但文件仍然连接
- tcl - 期望通过 ssh 写入远程文件