首页 > 解决方案 > 允许许可后设备未获取位置 - React Native - Android

问题描述

我正在使用完全取决于位置的反应本机应用程序,因此我为它创建了下面的代码,在大多数真实设备中我无法获取位置,并且总是通过取消或取消警报框返回错误到授予条件再试一次

getLocation = () = {
    try {
        const granted = await PermissionsAndroid.request(
          PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
          {
            'title': 'Permission Title',
            'message': 'App ' +
              'Message'
          }
        )
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
            that = this;
            navigator.geolocation.getCurrentPosition(
                (position) => {
                    this.checkLogin(position);
                },
                (error) => {
                    Alert.alert(
                      'Location',
                      'We are not able to get your current location.',
                      [
                        {text: 'Cancel', onPress: () => BackHandler.exitApp(), style: 'cancel'},
                        {text: 'Try Again', onPress: () => this.getLocation()},
                      ],
                      { cancelable: false }
                    )
                },
                { enableHighAccuracy: false, timeout: 5000, maximumAge: 1000, distanceFilter: 1 }
            );
        } else {
          alert("Location permission denied")
        }
    }catch(err){
        alert(err)
    }
}

AndroidManifest.xml

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

是否有任何适用于所有设备的快速解决方案,或者如果我必须更新上述代码,请告诉我。

标签: androidreact-native

解决方案


我会推荐这个库来响应本地地理定位。这是一个开箱即用的可靠插件。您甚至不需要执行自己的权限实现。它为你做。我将它用于我在 React Native 中构建的 Android 和 iOS 应用程序。它甚至可以配置为在后台工作!


推荐阅读