我正在编写一个需要用户当前位置坐标的应用程序。我使用Cordova Geolocation API并且正在开发英特尔XDK环境。
在某些手机(例如Samsung S3和S4)中,API无法获取位置,而是返回超时错误。但是,有时它会在重新启动手机后起作用。
我需要一个稳定的解决方案,因为该位置对我的项目至关重要。这是我目前的代码:
navigator.geolocation.getCurrentPosition(geolocationSuccess,
geolocationError,
{maximumAge:0,timeout: 7000, enableHighAccuracy: true});
我尝试使用不同的参数调用getCurrentPosition
(更改了maximumAge,timeout等),但似乎没有任何效果。
我能解决这个问题吗?是否有其他插件可以让我获得用户的位置?或者,我可以以某种方式使用手机的本机功能来获取位置吗?
答案 0 :(得分:0)
打开Android项目最明显并添加这些权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
然后重新编译并启动您的项目。
答案 1 :(得分:0)
getCurrentPosition()
针对设备位置发出单一请求。如果在应用程序启动后立即调用此选项,则在GPS硬件有机会获得定位之前,可能会发生超时(7000毫秒/ 7秒不长 - 我将其增加到30000)。
我建议使用watchPosition()
来设置一个观察程序,每次操作系统收到位置更新时都会调用成功函数。如果您只需要一个位置,那么一旦您获得了可接受的准确度,您就可以清除观察者。
例如:
var minAccuracyInMetres = 50;
var positionWatcher = navigator.geolocation.watchPosition(
geolocationSuccess,
geolocationError,
{maximumAge:0, timeout: 30000, enableHighAccuracy: true});
function geolocationSuccess(position){
// Reject if accuracy is not sufficient
if(position.coords.accuracy > minAccuracyInMetres){
return;
}
// Only single position required so clear watcher
navigator.geolocation.clearWatch(positionWatcher);
// Do something with the user's location...
}