Expo - api геозоны не возвращает значения при запуске геозоны - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь запустить API Expo geofencing с помощью действия кнопки в react native.

Я собрал пример, но когда я пытаюсь запустить действие геозоны, оно ничего не делает. Я не получаю уведомления, если я нахожусь внутри или за пределами региона. Надеюсь получить руководство по этому поводу. Не могу найти рабочий пример. Я уже нашел следующие сообщения, которые, похоже, не работают:

Expo startGeofencingAsyn c не запускается

Expo - увеличьте точность определения местоположения с помощью Геозона

Прил. js

import { StyleSheet, Text, View, Button } from 'react-native';
import React, { Component } from 'react';
import * as Permissions from 'expo-permissions';
import * as Location from 'expo-location';
import * as TaskManager from 'expo-task-manager';


class App extends Component {

state= {
  point : {latitude: 0, longitude: 0},
  hasLocationPermission: null,
  location: null
}

async componentDidMount() {
  this.getLocationsPermissions();
  //Permissions.askAsync(Permissions.LOCATION);
  //await Location.startLocationUpdatesAsync('firstTask', {
  //  accuracy: Location.Accuracy.Balanced,
  //});

}



//update location points
getCurrentLoc = async () => {
  console.log('retrieving points');
  let location = await Location.getCurrentPositionAsync({});
  location =  await JSON.stringify(location);
  location = await eval( '(' + '[' + location + ']' + ')' );
  this.setState({ location: location })

}

//ask for location permissions 
getLocationsPermissions = async () => {
  let { status } = await Permissions.askAsync(Permissions.LOCATION);
  //status && console.log('location: ', status)
  if (status !== 'granted') {
    this.setState({
      errorMessage: 'Permission to access location was denied',
    });
    } else {
      this.setState({ hasLocationPermission : status })
    }
}

_startGeofence = async () => {
  console.log('starting geofencing test ...')
  Location.startGeofencingAsync('geofence',
    [
    {
      latitude: 40.763882,
      longitude: -73.929893,
      radius: 50
     }
     ]
    );

};




  render() {


    return (
      <View>
        <Text>geofence test</Text>
        <Button 
          onPress={this._startGeofence}
          title="AM-I-IN-THE-REGION?"
        />
        <Text>{this.state.location ? `my current location is lat: ${this.state.location[0].coords.latitude}` : `none`}</Text>
      </View>
    );
  }
}

export default App;

TaskManager.defineTask("geofence", ({ data: { eventType, region }, error }) => {
  if (error) {
    // check `error.message` for more details.
    return;
  }
  if (eventType === Location.GeofencingEventType.Enter) {
    console.log("You've entered region:", region);
  } else if (eventType === Location.GeofencingEventType.Exit) {
    console.log("You've left region:", region);
  }
});
...