当应用程序在后台或在本机反应中被杀死时,是不是可以检查用户的移动活动?

Posted

技术标签:

【中文标题】当应用程序在后台或在本机反应中被杀死时,是不是可以检查用户的移动活动?【英文标题】:Is it possible to check user's moving activity when app is in background or killed in react native?当应用程序在后台或在本机反应中被杀死时,是否可以检查用户的移动活动? 【发布时间】:2018-05-07 06:39:05 【问题描述】:

我们正在开发实时位置共享应用程序,我们必须在应用程序处于后台时运行我们的工作,如果它正在移动,我们需要获取用户的位置。

在 react-native 中是否有任何可能性,以便我们可以跟踪用户移动活动(在后台和终止状态)并跟踪位置或运行后台作业?

【问题讨论】:

我建议react-native-mauron85-background-geolocation 可以在应用程序在前台或后台运行时保留用户的位置。 是的,我们使用了它,但问题是当应用程序被杀死或在后台我们没有 api 将位置发送到服务器时,我们的 react native js 代码没有运行(我们使用 firebase 作为后端),并且该库由于设备保持清醒而消耗更多电池 【参考方案1】:

尝试监听 AppState 的变化,当你的应用进入后台时,你应该开始做你想做的事情。

import  AppState  from 'react-native';
import BackgroundTimer from 'react-native-background-timer';


state = 
        appState: AppState.currentState
    

在 componentDidMount 中使用这个:

AppState.addEventListener('change', this._handleAppStateChange);

在组件WillUnmount 中:

AppState.removeEventListener('change', this._handleAppStateChange);

使用类似这个函数,当应用在后台时,你会得到你的结果。

_handleAppStateChange = (nextAppState) => 
        if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') 
            console.log('App has come to the foreground!');
         else 
            console.log('App is in background');
            const interval = BackgroundTimer.setInterval(() => 
                    console.log('listen for location changes here');
                    if (this.state.appState === 'active') 
                        //Stop the interval when AppState goes 
                        //back to active again
                        BackgroundTimer.clearInterval(interval);
                    
                , 1000);
          
        
        this.setState( appState: nextAppState );
    

【讨论】:

以上是关于当应用程序在后台或在本机反应中被杀死时,是不是可以检查用户的移动活动?的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序从堆栈中被杀死时,后台服务停止

当应用程序处于后台时,在反应本机后台计时器 setInterval 中调用 await

当应用程序从后台处于活动状态时,如何避免在本机反应中安装组件?

当应用程序处于后台状态(Android)时,远程推送通知提示无法在本机反应中工作

后台服务在android中被杀死

即使应用程序在 ios 中被杀死或从后台删除,如何继续更新我的位置?