权限被拒绝 - React Native

时间:2017-01-09 01:05:49

标签: ios react-native geolocation

我一直在玩React Native,让自定义位置工作并设置" NSLocationWhenInUseUsageDescription"键。在ios模拟器上运行时,错误是:

{
 "code": 2,
 "message": "Unable to retrieve location.",
 "PERMISSION_DENIED": 1,
 "POSITION_UNAVAILABLE": 2,
 "TIMEOUT": 3 
}

这就是我所拥有的,几乎直接来自Geolocation示例页面https://facebook.github.io/react-native/docs/geolocation.html

/* eslint no-console: 0 */
'use strict';

var React = require('react');
var ReactNative = require('react-native');
var {
  StyleSheet,
  Text,
  View,
} = ReactNative;

export default class GeolocationExample extends React.Component {
  state = {
    initialPosition: 'unknown'
  };

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

  render() {
    return (
      <View>
        <Text>
          <Text style={styles.title}>Initial position: </Text>
          {this.state.initialPosition}
        </Text>
      </View>
    );
  }
}

var styles = StyleSheet.create({
  title: {
    fontWeight: '500',
  },
});

任何帮助将不胜感激!

7 个答案:

答案 0 :(得分:7)

您需要在模拟器中设置位置。在此问题中描述的模拟器菜单中有一个选项: Set the location in iPhone Simulator

答案 1 :(得分:5)

在Simulator导航器中,选择Debug,在底部选择Location,然后选择Apple,然后CMD + R重新加载即可。 enter image description here

答案 2 :(得分:3)

正如Santosh建议的那样,您需要在iOS模拟器中设置位置:Debug&gt;位置。

请记住,即使您在模拟器中设置了位置,也会不时出现“PERMISSION_DENIED”错误。如果发生这种情况,您需要选择不同的预定义位置,然后错误就会消失。

答案 3 :(得分:1)

为Santosh的答案添加了更新,请注意,在我当前的模拟器版本(11.4)中,可以在以下位置找到设置位置的选项:

功能->位置

(将其发布为新答案,因为我尚未被评论)。

答案 4 :(得分:0)

我在真实设备上进行测试,但出现相同的错误。 我刚刚重新启动设备,它开始工作。仍然遇到问题的任何人都可以尝试一下。

答案 5 :(得分:0)

因此,对于那些仍在物理设备中寻找答案的人

如果您正在使用

<input id="startstopbutton" class="buttonZ" style="width: 120px;" type="button" name="btn" id='btn' value="Start" onclick="startstop();">
<input id="resetbutton" class="buttonZ" style="width: 120px;" type="button" name="btnRst1" id='btnRst1' value="Reset" onclick="time();" />
<div id="clock" class="timerClock" value="00:00:00">00:00:00</div>
<br>
<textarea id="output" spellcheck="false" readonly></textarea>

然后

import Geolocation from '@react-native-community/geolocation';

如果您不处理错误,则会引发错误或使您的应用崩溃。

答案 6 :(得分:0)

现在是 iOS 模拟器:功能 > 位置。Add location in simulator