看起来应用程序无权访问本机反应中的位置

Vip*_*bey 2 react-native react-native-android

我正在制作一个使用 gps 访问用户位置的应用程序。这就是为什么我在 AndroidManifest.xml 中添加了以下几行

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

下面是我获取用户位置的函数

componentWillMount(){
    navigator.geolocation.getCurrentPosition(
      position => {

        this.setState({
          latitude: position.coords.latitude,
          longitude: position.coords.longitude,

        });
      },
      error => Alert.alert(error.message),
      { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
    );

  }
Run Code Online (Sandbox Code Playgroud)

但这会产生错误,即应用程序无权访问位置,我需要声明

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)

在清单文件中。我尝试了很多方法并找到了一个解决方案,即要求运行时许可。所以我还在我的代码中添加了以下几行

try {
      const granted =  PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
        {
          'title': 'Location Permission',
          'message': 'This app needs access to your location',
        }
      )
      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        console.log("You can use the location")
      } else {
        console.log("Location permission denied")
      }
    } catch (err) {
      console.warn(err)
}
Run Code Online (Sandbox Code Playgroud)

但问题并没有消失。我该怎么办?

Naz*_*gan 5

如果你没有使用 Promise ,你应该使用async-await. 在您的代码中它丢失了。获得许可后,您可以获取位置

async  requestLocationPermission(){
  try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      {
        'title': 'Example App',
        'message': 'Example App access to your location '
      }
    )
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
      console.log("You can use the location")
      alert("You can use the location");
    } else {
      console.log("location permission denied")
      alert("Location permission denied");
    }
  } catch (err) {
    console.warn(err)
  }
}

 async componentDidMount() {
   await requestLocationPermission()
  }
Run Code Online (Sandbox Code Playgroud)