当前位置: 首页 > 知识库问答 >
问题:

当同一应用在后台运行位置服务时,Firebase 实时断开连接不起作用(位置.enable后台模式(启用:true);)

富凯风
2023-03-14

注意此问题仅在android上

>

  • 我在后台实现了位置服务,以在应用程序在后台时获取位置更新(应用程序终止时我不需要位置,只在应用程序在后台时需要)

    我实现了一个监听器,在用户启动/终止应用程序时更新实时数据库(状态)FirebaseDatabase.instance.reference().child('presence').child(id.onDisconnect().update({“status”:“offline”};

    当我终止应用程序时,“onDisconnect”不启动(仅在android上),即使过了很长时间。当我删除了后台定位功能,一切都完美地工作。

    我最初的怀疑是,当后台定位服务运行时,虚拟机仍然连接着flutter,因此保持“应用程序运行”,从而防止“onDisconnect”触发。

    当我在应用程序中保留两个服务(后台位置和onDisconnect)并直接从android studio(在终端上使用“Q”)终止应用程序时,虚拟机将终止应用程序,一切正常。不幸的是,应用程序用户将没有此选项。

    我的问题:任何建议,将有助于保持这两个功能(后台位置和断开连接)和有断开连接火灾(只有一个Android问题)。

    谢谢。

  • 共有1个答案

    韩彦君
    2023-03-14

    您可以捕获AppLifecycleState更改,而不是依赖firebase实时数据库的onDisconnect。这适用于iOS和Android,更准确。

    小部件绑定观察器添加到有状态小部件和侦听器中。

    检查状态 == 应用程序生命周期状态.已暂停,以了解它是否在后台运行。

    class _HomeControlState extends State<HomeControl> with WidgetsBindingObserver {
        
        @override
        void didChangeAppLifecycleState(AppLifecycleState state) {
          // check here for the state of your app
        }
    
        @override
        void initState() {
          super.initState();
          WidgetsBinding.instance!.addObserver(this);
        }
    
        @override
        void dispose() 
          WidgetsBinding.instance!.removeObserver(this);
          super.dispose();
        }
    }
    
     类似资料:
    • 我最近将iOS设备升级为使用iOS 7。我们正在开发的一个应用程序使用后台位置服务跟踪设备位置,我们所有的测试人员都报告说,在iOS 7下,该应用程序似乎不再在后台跟踪设备位置。 我们已经验证了应用程序的背景在设备上的设置中启用,并且之前的版本在iOS6下完美运行。即使设备被循环使用,应用程序也会在位置更新后重新启动。 在iOS7下,是否还需要做些什么来使这项工作发挥作用?

    • 我的背景粘性服务是杀死奥利奥和更高的设备,任何解决方案,以获得位置的背景服务时,活动是在后台

    • 我想实现一个长时间运行的后台计时器,它定期将用户的位置发送到服务器。 为此,我为设置模式,并在应用程序转到后台时调用。对于,我使用方法(不希望使用重大更改,因为我需要高精度的定位)。 但是大约在应用程序进入后台26分钟后,它会停止向服务器发送位置。但是应用程序没有崩溃,所以在我把应用程序带到前台后,它可以恢复计时器。 26分钟来自实验,iOS6.1,苹果5。 这里有一些问题,, > 我不明白为什么

    • 为了创建一个位置跟踪系统(基于fusedlocationprovider),该系统必须跟踪一个人在特定时间段内的位置。 在特定的时间间隔内,需要广播位置,即使应用程序关闭,也不应终止服务。 我应该使用前台还是后台服务,或者两者结合使用,再加上一个解释会很有帮助。

    • 我正在构建一个在后台工作的iOS应用程序,并每3分钟将用户的位置发布到服务器上(因为这是iOS 7上的最长后台执行时间)。但是,有一个问题,后台服务在随机时间终止。所以有时候它可以在后台运行2个小时,有时候7个小时,然后3个小时,然后是随机的,依此类推。 下面的代码产生错误。我已经能够检测到它何时终止,也就是[UIApplication sharedApplication]何时终止。剩余的背景时间