没有获得Android 8.0.0 Oreo中的位置

问题描述 投票:2回答:1

我正在使用React-Native构建应用程序,并且需要根据要求进行位置访问。

我尝试过使用react-native-fused-location,如下所示。

           FusedLocation.setLocationInterval(20000);
           FusedLocation.setFastestLocationInterval(15000);
          FusedLocation.setSmallestDisplacement(10);

          FusedLocation.setLocationPriority(
            FusedLocation.Constants.HIGH_ACCURACY
          );
          FusedLocation.startLocationUpdates();


          FusedLocation.getFusedLocation().then(location => {

            if (location != null) {
              let initialPosition = JSON.stringify(location);
              this.state.latitude = location.latitude;
              this.state.longitude = location.longitude;
              this.state.timestamp = location.timestamp;
              this.state.initialPosition = initialPosition;


            } else {
              alert("Location unavailable, please try later");
            }
          }).catch(error => {  // fused location catch
             console.log("location retrieval failed");
          });

对于Oreo 8.0.0,我收到的唯一输出是上面的代码,E / request:100。

也尝试了另一种方式如下

navigator.geolocation.watchPosition(
            location => {
              console.log("inside watchPosition location");
              if (location != null) {
                console.log("location is not null");
                let initialPosition = JSON.stringify(location.coords);
                this.state.latitude = location.coords.latitude;
                this.state.longitude = location.coords.longitude;
                this.state.timestamp = location.coords.timestamp;
                this.state.initialPosition = initialPosition;


              } else {
                alert("Location unavailable, please try later");
              }
            },
            error => {
              console.log("calling ShowHideActivityIndicator,  getLocationWithNavigate (ios)");

              this.ShowHideActivityIndicator(false);
              alert("location retrieval failed");
              console.log(error);
            },
            { timeout: 20000, enableHighAccuracy: true, distanceFilter: 10 }
          );

但是在上述两个代码中获得相同的输出,无法在Android Oreo 8.0.0中获得该位置。即使是检索回调的位置也不会被调用。虽然在其他版本中,包括Oreo 8.1.0和较低版本的设备,包括Marshmallow和Nougat,但似乎工作正常。

但是,如果我在Oreo 8.0.0中打开假GPS,那么它似乎能够获得该位置。我无法弄明白,我错过了什么。

react-native location react-native-android android-8.0-oreo android-fusedlocation
1个回答
0
投票

提到谷歌文件:

为了降低功耗,Android 8.0(API级别26)限制了后台应用程序检索用户当前位置的频率。应用每小时只能收到几次位置更新.Background Location Limits

© www.soinside.com 2019 - 2024. All rights reserved.