Intereting Posts
Позволяет ли SQLCipher доступ к базе данных другим приложением (если DB в SD-CARD) Android: ListView, последний элемент – Показать больше Андроидный sqlite-запрос с несколькими Могу ли я получить онлайн-пользователей в списке друзей через Smack? Чтение андроида jpeg EXIF ​​метаданные из обратного вызова изображения Интеграция AndroidAnnotation с Intellij IDEA 12 Как пакетный коммутатор работает на Android как smali, произведенный apktool? Вызывается: java.lang.NoClassDefFoundError: класс не найден с загрузчиком загрузчика; Нет доступной трассировки стека Скользящее меню с использованием библиотеки jfeinstein10 Маршрутизировать аудио с телефона Android на ПК через USB? Android Maven Eclipse по-прежнему не может импортировать apklib Ошибка Gradle 0.9. + / 0.9.2: невозможно загрузить класс 'com.android.builder.testing.api.DeviceProvider' Исключенное исключение битмапа Проверьте, какой класс использует API-библиотеки Android Определить макрос для ошибки журнала с файлом и строкой в ​​android

Как создавать карты, которые обнаруживают автоматическое местоположение в React-Native

Я создал карты в response-native, ссылаясь на https://github.com/lelandrichardson/react-native-maps map, но я хочу обнаружить автоматическое местоположение с помощью gps. Вот код, который отображает карту со статической широтой и долготой. Вот мой обновленный код. Но он все еще не обеспечивает идеальное местоположение

getInitialState() { return { initialPosition: 'unknown', lastPosition: 'unknown', }; }, componentDidMount() { navigator.geolocation.getCurrentPosition( (position) => { var initialPosition = JSON.stringify(position); this.setState({initialPosition}); }, {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000} ); this.watchID = navigator.geolocation.watchPosition((position) => { var lastPosition = JSON.stringify(position); this.setState({lastPosition}); }); }, componentWillUnmount() { navigator.geolocation.clearWatch(this.watchID); }, render() { return ( <View style={styles.container}> <MapView ref="map" mapType="terrain" style={styles.map} initialPosition={this.state.initialPosition} lastPosition={this.state.lastPosition} > </MapView> </View> 

Можете ли вы исправить это?

заранее спасибо

Solutions Collecting From Web of "Как создавать карты, которые обнаруживают автоматическое местоположение в React-Native"

Вы можете сделать это с помощью React-native geolocation:
https://facebook.github.io/react-native/docs/geolocation.html

Там уже есть хороший пример того, как вы можете это сделать:

 componentDidMount: function() { navigator.geolocation.getCurrentPosition( (position) => { var initialPosition = JSON.stringify(position); this.setState({initialPosition}); }, (error) => alert(error.message), {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000} ); this.watchID = navigator.geolocation.watchPosition((position) => { var lastPosition = JSON.stringify(position); this.setState({lastPosition}); }); } 

Теперь у вас есть initialPosition (широта и долгота), используйте его вместо жесткого кодированного значения. Функция watchPosition вызывает обратный вызов успеха всякий раз, когда изменяется местоположение.

В настоящее время я использую это, чтобы найти местные рестораны в нашем приложении.


Обновленный ответ:

Я использую эмулятор Genymotion для запуска этого. Если вы также собираетесь запускать этот код в Genymotion, убедитесь, что вы установили поддержку Google Play , иначе реагировать-родные карты не будут работать. Вам не нужно делать этот шаг, если вы используете физическое устройство.

https://github.com/codepath/android_guides/wiki/Genymotion-2.0-Emulators-with-Google-Play-support

Что касается геолокации , убедитесь, что вы добавили разрешение ACCESS_FINE_LOCATION в AndroidManifest.xml:

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

В противном случае вы получите сообщение об ошибке: «Похоже, у приложения нет разрешения на доступ к местоположению».

Также убедитесь, что ваш GPS / Wifi / Data включен, в противном случае ваше устройство не сможет получить ваше текущее местоположение.

 var React = require('react'); var ReactNative = require('react-native'); var { StyleSheet, PropTypes, View, Text, Dimensions, TouchableOpacity, } = ReactNative; var MapView = require('react-native-maps'); var { width, height } = Dimensions.get('window'); const ASPECT_RATIO = width / height; // (Initial Static Location) Mumbai const LATITUDE = 19.0760; const LONGITUDE = 72.8777; const LATITUDE_DELTA = 0.01; const LONGITUDE_DELTA = LATITUDE_DELTA * ASPECT_RATIO; var CustomMap = React.createClass({ getInitialState() { return { region: { latitude: LATITUDE, longitude: LONGITUDE, latitudeDelta: LATITUDE_DELTA, longitudeDelta: LONGITUDE_DELTA }, }; }, componentDidMount: function() { navigator.geolocation.getCurrentPosition( (position) => { this.setState({ region: { latitude: position.coords.latitude, longitude: position.coords.longitude, latitudeDelta: LATITUDE_DELTA, longitudeDelta: LONGITUDE_DELTA } }); }, (error) => alert(error.message), {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000} ); this.watchID = navigator.geolocation.watchPosition((position) => { const newRegion = { latitude: position.coords.latitude, longitude: position.coords.longitude, latitudeDelta: LATITUDE_DELTA, longitudeDelta: LONGITUDE_DELTA } this.onRegionChange(newRegion); }); }, componentWillUnmount: function() { navigator.geolocation.clearWatch(this.watchID); }, onRegionChange(region) { this.setState({ region }); }, render() { return ( <View style={styles.container}> <MapView ref="map" mapType="terrain" style={styles.map} region={this.state.region} onRegionChange={this.onRegionChange} > </MapView> <View style={styles.bubble}> <Text style={{ textAlign: 'center'}}> {`${this.state.region.latitude.toPrecision(7)}, ${this.state.region.longitude.toPrecision(7)}`} </Text> </View> </View> ); }, }); var styles = StyleSheet.create({ container: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, justifyContent: 'flex-end', alignItems: 'center', }, map: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, }, bubble: { backgroundColor: 'rgba(255,255,255,0.7)', paddingHorizontal: 18, paddingVertical: 12, borderRadius: 20, }, }); module.exports = CustomMap; 

Запустив вышеуказанный код, вы должны обнаружить, что ваше исходное статическое местоположение (Mumbai) будет перезаписано вашим текущим местоположением с устройства через componentDidMount при вызове getCurrentPosition.

Если вам нужно отслеживать изменения в позиции, используйте watchPosition в сочетании с onRegionChange , иначе, если вам просто нужно, чтобы начальная позиция удаляла шаг watchPosition .