Я пытаюсь запустить 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);
}
});