地理位置反应原生

Posted

技术标签:

【中文标题】地理位置反应原生【英文标题】:GeoLocation React Native 【发布时间】:2019-08-20 10:05:22 【问题描述】:

我正在尝试获取我的代码在 iosandroid中,当用户拒绝时它不会抛出错误 位置权限。

AppState.addEventListener('change', this._handleAppStateChange);
      this.geoFailure, geoOptions);
        this.refresh();
      

geoSuccess = (position) =>  //Success callback when user allow the 
                              location
    this.setState(
        ready:true,
        where: lat: 
  position.coords.latitude,lng:position.coords.longitude 
    )



geoFailure = (err) =>   // i am not getting any error when user 
                            denies the location permission in the 
                            case of android.
    this.setState(error: err.message);
    console.log("Errror",err)
    console.log(err.message)
    if(err.message='User denied access to location services'&&Platform.OS==='ios')
        this.props.screenName==='SPLASH'&&!this.state.ready?NavigatorService.navigate(LOCATION_PERMISSION):null;
     



refresh=()=>   // Refreshing the list when the AppState becomes 
                  active 
    let geoOptions = 
        enableHighAccuracy: false,
        timeout: 30000,
        maximumAge: 60 * 60 * 24
    ;
    this.setState(ready:false, error: null );
     navigator.geolocation.getCurrentPosition( this.geoSuccess, this.geoFailure, geoOptions);

如果是 ios,我可以将用户导航到另一个屏幕 如果它不提供位置权限,但在 当用户不提供时,它不会给出任何错误的android 地点。

我不知道怎么做,我是 react native 的新手。

我没有得到,我做错了什么。

任何帮助将不胜感激。

【问题讨论】:

您是否在android中获得了许可?如果是,那么android中的许可代码是什么? 是的,我已经获得了许可,它在 AndroidManifest.xml 中 Android api 23 及更高版本,您必须获取运行时权限,而不仅仅是清单 是的,我已经做到了 【参考方案1】:

使用权限Android

import 
   PermissionsAndroid
 from 'react-native';

 const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      );
      if (granted === PermissionsAndroid.RESULTS.GRANTED) 
        Geolocation.getCurrentPosition(
          (position) => 
            addLocation(position.coords);
          ,
          (error) => 
            console.error(error);
          ,
           enableHighAccuracy: true, timeout: 15000, maximumAge: 10000 ,
        );
       else 
        console.log('location permission denied');
      

【讨论】:

做一个回购并分享链接 有什么问题请分享

以上是关于地理位置反应原生的主要内容,如果未能解决你的问题,请参考以下文章

反应原生背景地理定位

geolib在反应原生状态下未准备好地理位置坐标

反应原生检查位置服务是不是在iOS上

反应原生无法从蜂窝网络找到位置

对原生地理位置做出反应,而不是在 android 模拟器上询问用户权限

如何在占位符文本上启动光标位置中心反应原生?