【发布时间】:2019-03-03 09:49:05
【问题描述】:
我正在使用 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