flutter - 如何为互联网连接事件注册应用程序侦听器?
问题描述
我有一个在 Android 和 iOS 上运行的应用程序颤振。
此应用程序用于没有任何互联网连接的地区。当用户到达某个有互联网连接的地方时,必须将所有离线数据发送到服务器。
让后台任务运行并循环检查互联网连接,甚至是重复的计划任务,都不是一种选择,因为:
- 从在现场使用应用程序到用户使用互联网连接到位之间的时间可能需要数小时。
- 在后台运行线程会消耗资源并消耗手机电池。
- Android/iOS 可能会完成后台进程,除非用户打开应用程序,否则数据不会发送。
我想知道如何注册一种监听器,监听操作系统广播的“互联网连接事件”,当它们发生时,这将唤醒我的应用程序并触发回调。
然后,我不必让不必要的后台任务无限运行,但是当手机连接到互联网时,即使我的应用程序关闭/休眠,我仍然可以完成这项工作。
我怎么能在颤动中做到这一点?
解决方案
有一个用于监听连接状态的包,称为connectivity_plus,您可以像这样订阅流:
import 'package:connectivity_plus/connectivity_plus.dart';
@override
initState() {
super.initState();
subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
// Got a new connectivity status!
})
}
// Be sure to cancel subscription after you are done
@override
dispose() {
super.dispose();
subscription.cancel();
}
但是在文档中,它明确指出,从 Android O 开始,连接更改不再在后台传达给 Android 应用程序。您应该始终在应用程序恢复时检查连接状态。广播仅在您的应用程序处于前台时才有用。
你可能想研究一下,看看是否有可能在后台这样做。这是一个类似的问题,可能会对您有所帮助
推荐阅读
- javascript - 这个视频播放图标是如何在 html 按钮上生成的,而不提供任何来源?
- angular - 如何禁用 nz-zorro-antd 的选择控件的下拉菜单?
- web-scraping - 无法使用 Scrapy 抓取图像
- javascript - 有没有办法使用 setTimeout 为我的代码添加冷却时间,以便人们不会向命令发送垃圾邮件?
- python - 在 PyQt 中使用 QProcess 运行类方法
- android - Play 商店中的更新按钮不适用于我的新更新
- intellij-idea - IntelliJ Ultimate 中没有 Web 应用程序选项
- python - 导入python字典变量,失败:AttributeError:'dict'对象没有属性
- python - 基于列表的打印python删除最后一个逗号
- java - Spring Boot 项目“org.springframework.beans.factory.BeanCreationException:创建名为“entityManagerFactory”的bean时出错”错误