背景位置跟踪无法正常工作 -Android


如果应用程序在后台以及设备睡着,我正在研究需要跟踪背景位置的某些事情。我目前在后台为应用程序工作,但是当设备入睡时,它停止跟踪。我正在为该应用程序使用EXPO,并将Expo Task Manager与Expo位置一起使用,以在后台获取位置。 有人知道如何在应用程序处于后台和设备处于睡眠模式时如何获取位置?

这是代码


import { StatusBar } from 'expo-status-bar';
import React, { useState, useEffect } from 'react';
import { StyleSheet, Text, View } from 'react-native';
import * as Location from 'expo-location';
import * as TaskManager from 'expo-task-manager';

const App = () => {
  useEffect(() => {
    (async () => await _askForLocationPermission())();
  });

  this.backgroundLocationFetch = async () => {
    const { status } = await Location.requestBackgroundPermissionsAsync();
    if (status === 'granted') {
      console.log('cmon dance with me!')
      await Location.startLocationUpdatesAsync('FetchLocationInBackground', {
        accuracy: Location.Accuracy.Balanced,
        timeInterval: 3000,
        distanceInterval: 1,
        foregroundService: {
          notificationTitle: 'Live Tracker',
          notificationBody: 'Live Tracker is on.'
        }
      });
    }
  }



  const _askForLocationPermission = async () => {
    (async () => {
      let { status } = await Location.requestBackgroundPermissionsAsync();
      if (status !== 'granted') {
        setgpsErrorMsg('Permission to access location was denied');
      }
    })();
  };


  return(
    <View>
      <Text></Text>
    </View>
  )
};

TaskManager.defineTask('FetchLocationInBackground', ({ data, error }) => {
  if (error) {
    console.log("Error bg", error)
    return;
  }
  if (data) {
    const { locations } = data;
    console.log("BGGGG->", locations[0].coords.latitude, locations[0].coords.longitude);
  }
});




export default App;

  

我遇到了同样的问题,并通过使用和EventEmitter将位置更新分配给UI组件来解决此问题。

最高文件:


import EventEmitter from 'EventEmitter'

const locationEmitter = new EventEmitter();
  

didmount:


locationEmitter.on(LOCATION_UPDATE, (locationData) => {
    console.log('locationEmitter locationUpdate fired! locationData: ', locationData);
    let coordinatesAmount = locationData.newRouteCoordinates.length - 1;
    this.setState({
        latitude: locationData.newRouteCoordinates[coordinatesAmount - 1].latitude,
        longitude: locationData.newRouteCoordinates[coordinatesAmount - 1].longitude,
        routeCoordinates: this.state.routeCoordinates.concat(locationData.newRouteCoordinates)
    })
})
  

组成灯:


locationEmitter.off(LOCATION_UPDATE);
  

内部背景任务定义:


locationEmitter.emit(LOCATION_UPDATE, locationData)
  

这成功地从背景任务发送了位置数据,但是我仍然陷入了如何使背景任务发送位置更新批次的问题。我的相关帖子在这里。

背景位置跟踪无法正常工作 -Android的相关文章

随机推荐