【问题标题】:React Native: Cannot access location using geolocation APIReact Native:无法使用地理定位 API 访问位置
【发布时间】:2018-11-29 14:21:49
【问题描述】:

错误:该应用似乎没有访问位置的权限。将以下行添加到您应用的 AndroidManifest.xml

即使我在 manifest.xml 中添加了权限并请求运行时权限,我也无法访问 GPS。

我的 AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.location">

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

完整代码:

import React, { Component } from 'react';
import { Platform, StyleSheet, Text, View,
 PermissionsAndroid } from 'react-native';

export default class App extends Component {
  async requestLocationPermission() {
    try {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
        {
          'title': 'Location Access Permission',
          'message': 'Expensify would like to use your location ' +
                     'so you we track you.'
        }
      )
      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        console.log("You can use the location")
      } else {
        console.log("Location permission denied")
      }
    } catch (err) {
      console.warn(err)
    }
  }
  componentDidMount() {
    console.log("compdidmount");
    this.requestLocationPermission();
//Crashes here on getCurrentPosition
        navigator.geolocation.getCurrentPosition(
          (position) => {
            console.log(position.coords.latitude);
           },
           (error) => {
            console.log(error)
          },
          {enableHighAccuracy: true, timeout: 20000, maximumAge: 10000}
        );
    }
      render() {
        return (
          <View style>
            <Text style>
              Tracking App
            </Text>
          </View>
        );
      }
    }

【问题讨论】:

  • 您不应该在调用getCurrentPosition 之前等待您的requestLocationPermission 函数吗?

标签: react-native geolocation


【解决方案1】:

CameraRoll 遇到了同样的问题。我修复了这个问题,在应用程序启动时请求许可。你应该使用这个:

import { PermissionsAndroid } from 'react-native';

async function requestCameraPermission() {
  try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      {
        'title': 'Location Permission',
        'message': 'Location Permission' +
                   'so you can use GPS location.'
      }
    )
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
      console.log("You can use GPS")
    } else {
      console.log("GPS location denied")
    }
  } catch (err) {
    console.warn(err)
  }
}

【讨论】:

  • 已经添加到代码中。因为,我在 Android 5.1 上测试它。它不要求运行时权限。我还没有在 Android 6+ 上测试过它:/
  • 嘿,@oma 你能查一下this 的问题吗?
【解决方案2】:

我通过删除并重新安装应用程序解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2015-11-28
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2016-10-26
    相关资源
    最近更新 更多