在IOS中寻找gps coords时没有问题。它工作正常。
在Android方面,它不像IOS那样稳定。在真实设备和模拟器中都存在这个问题。有时它可以找到位置,但有时不会。寻找3天,但没有找到解决方案。
当我的应用无法找到我的位置时,我尝试使用Google地图应用,就像魅力一样。
以下是IOS和Android的代码;
getCurrentPosition() {
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({ initialPosition: position });
alert(JSON.stringify(position))
var coords = new Coords();
coords.Latitude = position.coords.latitude;
coords.Longitude = position.coords.longitude;
this.getPharmaciesByCoordinates(coords);
},
(error) => alert(error.message),
{ enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
);
this.watchID = navigator.geolocation.watchPosition((position) => {
this.setState({ initialPosition: position });
},
(error) => alert(error.message),
{ enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
);
}
欢迎任何类型的解决方案。
由于
答案 0 :(得分:6)
我在Android上删除了maximumAge: 3600000
并且正在运行
答案 1 :(得分:5)
---------------------------------------------------------------------------
SyntaxError Traceback (most recent call last)
<ipython-input-85-ed294a40a103> in <module>
9 cur.execute("""SELECT * FROM data
10 ORDER BY ts DESC
---> 11 WHERE ts = TO_TIMESTAMP('{0}','YYYY-MM-DD HH:MI:SS+00:00')""".format(date_to_choose))
12
13
SyntaxError: syntax error at or near "WHERE"
LINE 3: WHERE ts = TO_TIMESTAMP('2020-04-22 06:34:08+00:...
^
import Geolocation from '@react-native-community/geolocation';
此功能对我有用,我已使用
更改了“ AndroidManifest.xml”文件Geolocation.getCurrentPosition(
position => {
const initialPosition = JSON.stringify(position);
console.log(initialPosition);
},
error => Alert.alert('Error', JSON.stringify(error)),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000},
);
答案 2 :(得分:4)
您可能在建筑物或办公室内,而且您的信号不是那么好。我试过很多配置,这个对我来说最合适:
{
enableHighAccuracy: false,
timeout: 5000,
maximumAge: 10000
}
或尝试增加超时。因为对我来说通常2000毫秒不工作,我不断得到“位置请求超时”。因此,禁用高精度,增加超时,你就可以了。
答案 3 :(得分:3)
您好,我遇到了同样的问题“请求超时”。 我已经尝试了所有可能的解决方案,但是这些解决方案对我来说不起作用,但是最近我找到了一个可以解决此问题的模块。 react-native-geolocation-service 这对我有用.....
答案 4 :(得分:1)
我通过外部库找到了一个使用原生LocationManager
的解决方案。它根据需要使用播放服务位置和发射位置事件。
这是图书馆; https://bitbucket.org/timhagn/react-native-google-locations#readme
在为Android编译时,不要忘记包含android/app/build.gradle
dependencies {
...
compile "com.google.android.gms:play-services:10.0.1" -> which version that you have write down here.
...
}
最后不要忘记在 Android SDK Manager 中下载Google Play Services
和Google Support Library
,您可以找到您的播放服务版本;
<android-sdk-location>/<sdk-version>/extras/google/m2repository/com/google/android/gms/play-services
答案 5 :(得分:1)
删除参数“maximumAge”并保留
{ enableHighAccuracy: true, timeout: 2000}
答案 6 :(得分:0)
我已经按照位置请求完成了该应用。命令
{ enableHighAccuracy: true, timeout: 25000, maximumAge: 3600000 },
将在iOS上运行,但不能在Android上运行。我认为您应该检查平台。
navigator.geolocation.getCurrentPosition(
(location) => {
console.log('location ', location);
if (this.validLocation(location.coords)) {
this.locationToAddress(location.coords);
}
},
(error) => {
console.log('request location error', error);
},
Platform.OS === 'android' ? {} : { enableHighAccuracy: true, timeout: 20000, maximumAge: 10000 }
);
答案 7 :(得分:0)
我尝试了各种方法和npm模块。最后,我使用此模块解决了这个问题。我强烈建议这样做。 https://www.npmjs.com/package/react-native-geolocation-service
答案 8 :(得分:0)
工作 {enableHighAccuracy:false,超时:5000,最大年龄:10000},
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
在P列表和android Manifest中添加权限
import React, { Component } from 'react';
import { View, Text } from 'react-native';
export default class App extends Component {
constructor(props) {
super(props);
this.state = {
latitude: null,
longitude: null,
error: null,
};
}
componentDidMount() {
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({
latitude: position.coords.latitude,
longitude: position.coords.longitude,
error: null,
});
},
(error) => this.setState({ error: error.message }),
{ enableHighAccuracy: false, timeout: 5000, maximumAge: 10000 },
// { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 },
);
}
render() {
return (
<View style={{ flexGrow: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Latitude: {this.state.latitude}</Text>
<Text>Longitude: {this.state.longitude}</Text>
{this.state.error ? <Text>Error: {this.state.error}</Text> : null}
</View>
);
}
}
答案 9 :(得分:0)
就我而言,在删除超时和maximumAge
并将enableHighAccuracy
设置为false
之后,它运行良好。
答案 10 :(得分:0)
对于那些仍然面临问题的人,请注意这些参数。我曾经将参数保留为默认值,但是当涉及到 enableHighAcuracy 时,您应该小心,因为将其设置为false时,意味着您请求的是WIFI位置,而不是GPS位置。如果未将其设置为true,则可能会像我一样在模拟器上收到错误消息。
支持的选项:超时(ms)-是一个正值,表示允许设备返回位置的最大时间长度(以毫秒为单位)。默认为INFINITY。
maximumAge(ms)-是一个正值,表示可以返回的可能缓存位置的最大年龄(以毫秒为单位)。如果设置为0,则意味着设备无法使用缓存的位置,必须尝试检索实际的当前位置。如果设置为Infinity,则设备将始终返回缓存的位置,而不管其寿命如何。默认为INFINITY。
enableHighAccuracy(布尔型)-是一个布尔值,表示是否使用GPS。如果设置为true,则将请求GPS位置。如果设置为false,将请求WIFI位置。
答案 11 :(得分:0)
我建议考虑两种处理方式:
以下是我实现第 2 项的方法:
import Geolocation from "@react-native-community/geolocation";
const getCurrentLocation = (resolve, enableHighAccuracy, onError) => {
console.log(`[getCurrentPosition] enableHighAccuracy=${enableHighAccuracy.toString()}`);
Geolocation.getCurrentPosition(
(position) => {
const location = {
latitude: position.coords.latitude,
longitude: position.coords.longitude
}
console.log('[getCurrentPosition] success');
resolve(location);
},
onError,
{enableHighAccuracy, timeout: 20000}
);
};
/**
* We first try to get location with enableHighAccuracy=true (try to get position via GPS) if it fails try to get it with enableHighAccuracy=false (try to get position from wifi)
* @return {Promise}
*/
export const getCurrentPosition = () => {
return new Promise((resolve) => {
getCurrentLocation(resolve, true,
(error1) => {
// failed to retrieve with enableHighAccuracy=true - now try with enableHighAccuracy=false
console.log(`[getCurrentPosition] failed 1st time trying again with enableHighAccuracy=false, error: ${error1.message}`);
getCurrentLocation(resolve, false, (error2) => {
// Could not retrieve location - we can live with that
console.log(`[getCurrentPosition] failed ${error2.message}`);
resolve();
})
});
});
}
答案 12 :(得分:-3)
{ enableHighAccuracy: true, timeout: 25000, maximumAge: 3600000 }
然后它会起作用。完整的代码如下。
import React, { Component } from 'react';
import { View, Text } from 'react-native';
class GeolocationExample extends Component {
constructor(props) {
super(props);
this.state = {
latitude: null,
longitude: null,
error: null,
};
}
componentDidMount() {
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({
latitude: position.coords.latitude,
longitude: position.coords.longitude,
error: null,
});
},
(error) => this.setState({ error: error.message }),
{ enableHighAccuracy: true, timeout: 25000, maximumAge: 3600000 },
);}
render() {
return (
<View style={{ flexGrow: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Latitude: {this.state.latitude}</Text>
<Text>Longitude: {this.state.longitude}</Text>
{this.state.error ? <Text>Error: {this.state.error}</Text> : null}
</View>
);
}
}
export default GeolocationExample;