我无法在带有 redux 的 react-native 中使用地理定位

Posted

技术标签:

【中文标题】我无法在带有 redux 的 react-native 中使用地理定位【英文标题】:I am unable to use geolocation in react-native with redux 【发布时间】:2019-02-13 05:39:34 【问题描述】:

我在带有 redux 的 react-native 中使用地理定位,但我遇到了 2 个问题..

    在我的 android studio 模拟器中显示错误的纬度和经度,我的位置是巴基斯坦拉合尔,但它显示的是美国位置。 当我签署了 apk 文件并将该 apk 文件安装到我的手机中时,它没有显示任何位置,为空。

谁能帮帮我?

这是我的代码..!

Reducer.js

let initialState = 
    lng: null,
    lat: null,


export default function prayerTimes(state = initialState, action) 
    switch (action.type) 

         case GET_LOCATION:
             return 
                ...state,
                lat: action.lat,
                lng: action.lng
         

    

Action.js

export function getLocation() 
    return dispatch => 
        navigator.geolocation.getCurrentPosition((position) => 
            dispatch(
                type: GET_LOCATION,
                lat: position.coords.latitude,
                lng: position.coords.longitude
            );
        );
    ;

App.js

componentDidMount() 
    const  getLocation  = this.props;
    getLocation();


render() 
   const  lng, lat  = this.props;
   return (
       <View style=justifyContent: 'center'>
            <Text style=color: 'white'>Latitude: lat</Text>
            <Text style=color: 'white'>Latitude: lng</Text>
       </View>
    );

【问题讨论】:

【参考方案1】:

您是否尝试过启用高精度?

navigator.geolocation.getCurrentPosition(
    (position) => 
        dispatch(
            type: GET_LOCATION,
            lat: position.coords.latitude,
            lng: position.coords.longitude
        );
    ,
    (error) => ,
     enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 ,
);

【讨论】:

高精度选项会花费一些时间,请确保添加正确的超时值。 当然可以,但是我可以将 maximumAge 从 1000 更改为 10,000 吗? 不推荐。最大年龄就像一个缓存。如果您将其设置得太高,它将永远不会更新。 当我在我的手机上安装这个应用程序时,它没有显示任何位置,就像空荡荡的世界一样【参考方案2】:

以下代码可用于获取我当前的国家/地区名称。

constructor(props) 
            super(props);
            this.state = 
                lat: null,
                long: null,
            ;
          

          componentDidMount ()      
            navigator.geolocation.getCurrentPosition(
                (position) => 
                   var lat = parseFloat(position.coords.latitude);
                   var long = parseFloat(position.coords.longitude);

                   this.setState( lat: lat, long: long );
                ,
                (error) =>   ,
            ); 
            

            componentDidUpdate () 

                var pos = 
                    lat: this.state.lat,
                    lng: this.state.long,
                ;

           Geocoder.geocodePosition(pos).then(res =>   // import Geocoder from 'react-native-geocoder';
               AsyncStorage.setItem('location',res[0].country); // res[0].country gives you the country name of your location
          )
                .catch(error => alert(error));

            

【讨论】:

它在 react-native 中,我不知道如何将代码从 react-native 转换为 react-native redux.. 对不起。我从未使用过 Redux。

以上是关于我无法在带有 redux 的 react-native 中使用地理定位的主要内容,如果未能解决你的问题,请参考以下文章

无法使用带有 redux-toolkit 的 socketIO 获取对象内函数的值

带有 redux 的 React-Native-Navigation V2 无法传递道具

带有嵌套对象数组的 Redux 的 Normalizr

带有 redux 组件的故事书

在带有Redux的ReactJS中避免竞争条件

无法识别的事件 React Native Redux