任何人都可以确认React Native Geolocation是否真的在Android上运行?
我在使用getCurrentPosition()
方法时遇到位置请求超时,并且在使用watchPosition()
方法时没有错误消息。
我已在AndroidManifest.xml上添加了所需的权限(FINE LOCATION),并且该应用允许位置权限。
这是我的实施:
componentWillMount() {
navigator.geolocation.getCurrentPosition((position) => {
console.log('+++++++');
console.log(position.coords.longitude);
this.setState({
longitude: position.coords.longitude,
error: null,
});
},
(error) => {
console.log(error);
},
);
}
React Native Version:0.42
答案 0 :(得分:1)
实施上述所有答案后 我不得不重启我的新手机然后开始工作
答案 1 :(得分:0)
是的,位置在我们针对Android的React Native应用程序中完美运行。
首先,getCurrentPosition(..)
不会返回watchId。您应该使用watchPosition(..)
。检查您的设备是否启用了位置服务,如果您在模拟器中对其进行了测试,则表明您已在模拟器设置中设置了位置。另请注意:在Android M及更高版本上,您还需要使用PermissionsAndroid.check(...)
和PermissionsAndroid.request(...)
API调用来请求权限。
答案 2 :(得分:0)
不要引用position
对象,而只需处理coords
对象。
navigator.geolocation.getCurrentPosition(
({coords}) => {
const {latitude, longitude} = coords
this.setState({
position: {
latitude,
longitude,
},
region: {
latitude,
longitude,
latitudeDelta: 0.001,
longitudeDelta: 0.001,
}
})
},
(error) => alert(JSON.stringify(error)),
// 'enableHighAccuracy' sometimes causes problems
// If it does, just remove it.
{enableHighAccuracy: true}
)
答案 3 :(得分:0)
您需要将enableHighAccuracy更改为false
const LATITUDE_DELTA = 0.0922;
const LONGITUDE_DELTA = LATITUDE_DELTA * ASPECT_RATIO;
this.state = {
region:{}}
navigator.geolocation.getCurrentPosition(
(position) => {
console.log(position);
this.setState({
region: {
longitude: position.coords.longitude,
latitude: position.coords.latitude,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA
}
});
},
(error) => console.log(new Date(), error),
{enableHighAccuracy: false, timeout: 10000, maximumAge: 3000}
);
答案 4 :(得分:0)
我有一个类似的问题,因为我在建筑物里,导致我的设备无法正确捕获gps信号。如果您在封闭的建筑物中,请尝试移至室外。
答案 5 :(得分:0)
我建议获得完美的位置数据是创建2个位置处理程序。
我使用react-native-location作为第一个处理程序
如果无法获取位置,我们将使用本机地理位置的第二个处理程序。
永不失败,兼容性:
检查以下示例:
配置
RNLocation.configure({
distanceFilter: 0.5,
desiredAccuracy: {
ios: "best",
android: "highAccuracy"
},
headingOrientation: "portrait",
// Android ONLY
androidProvider: "auto",
interval: 5000, // Milliseconds
fastestInterval: 10000, // Milliseconds
maxWaitTime: 5000, // Milliseconds
// IOS ONLY
allowsBackgroundLocationUpdates: false,
headingFilter: 1, // Degrees
pausesLocationUpdatesAutomatically: false,
showsBackgroundLocationIndicator: false,
})
功能 getUserLocation
static getUserLocation = async () => {
let locationSubscription: any = null
let locationTimeout: any = null
const options = { enableHighAccuracy: true, timeout: 25000 }
return new Promise<any>((resolve, reject) => {
// request permissions using RN Location
RNLocation.requestPermission({
ios: "whenInUse",
android: {
detail: "fine"
}
}).then(granted => {
console.log("Location Permissions: ", granted)
// if has permissions try to obtain location with RN location
if (granted) {
locationSubscription && locationSubscription()
locationSubscription = RNLocation.subscribeToLocationUpdates(([locations]: any) => {
locationSubscription()
locationTimeout && clearTimeout(locationTimeout)
console.log("location fetched with RN Geolocation")
resolve({ coords: { latitude: locations.latitude, longitude: locations.longitude }})
})
} else {
locationSubscription && locationSubscription()
locationTimeout && clearTimeout(locationTimeout)
console.log("no permissions to obtain location")
resolve(null)
}
// if RN Location cant resolve the request use Native Location instead
locationTimeout = setTimeout(() => {
navigator.geolocation.getCurrentPosition((locations) => {
locationSubscription()
locationTimeout && clearTimeout(locationTimeout)
console.log("location fetched with Native Geolocation")
resolve(locations)
}, error => {
locationSubscription && locationSubscription()
locationTimeout && clearTimeout(locationTimeout)
console.log("location error", error)
resolve(null)
}, options);
}, 15000)
})
})
}
答案 6 :(得分:0)
cd android gradlew clean
依赖性 “ react-native”:“ 0.62.0”, “ @ react-native-community / geolocation”:“ ^ 2.0.2”,
答案 7 :(得分:-1)
如果您尝试使用此代码,那么我已经在Android OS 8,RN 0.49.5中进行了测试 React Native current location 诀窍是设置
{ enableHighAccuracy: true, timeout: 25000, maximumAge: 3600000 }