ОБНОВЛЕНИЕ 2019 EXPO 33.0.0:
Экспо сначала устарело для SDK 32.0.0, чтобы соответствовать рекомендациям магазина приложений, но затем снова открыло его в SDK 33.0.0 .
С тех пор благодаря им стало очень легко реализовывать фоновое местоположение.Используйте этот фрагмент кода, который я использовал для фоновой геолокации.
import React from 'react';
import { Text, TouchableOpacity } from 'react-native';
import * as TaskManager from 'expo-task-manager';
import * as Location from 'expo-location';
const LOCATION_TASK_NAME = 'background-location-task';
export default class Component extends React.Component {
onPress = async () => {
await Location.startLocationUpdatesAsync(LOCATION_TASK_NAME, {
accuracy: Location.Accuracy.Balanced,
timeInterval: 5000,
});
};
render() {
return (
<TouchableOpacity onPress={this.onPress} style={{marginTop: 100}}>
<Text>Enable background location</Text>
</TouchableOpacity>
);
}
}
TaskManager.defineTask(LOCATION_TASK_NAME, ({ data, error }) => {
if (error) {
alert(error)
// Error occurred - check `error.message` for more details.
return;
}
if (data) {
const { locations } = data;
alert(JSON.stringify(locations); //will show you the location object
//lat is locations[0].coords.latitude & long is locations[0].coords.longitude
// do something with the locations captured in the background, possibly post to your server with axios or fetch API
}
});
Код работает как брелок.Стоит отметить, что вы не можете использовать геолокацию в приложении Expo .Однако вы можете использовать в своей автономной сборке .Следовательно, если вы хотите использовать фоновую геолокацию, вы должны использовать этот код, а затем выполнить expo build:ios
и загрузить его в магазин приложений, чтобы иметь возможность получить фоновое местоположение пользователя.
Кроме того, обратите внимание, что необходимо включить
"UIBackgroundModes":[
"location",
"fetch"
]
в раздел info.plist
вашего файла app.json
.