Cordova GPS应用程序超时错误

时间:2015-03-20 12:20:30

标签: cordova gps intel intel-xdk w3c-geolocation

我正在编写一个需要用户当前位置坐标的应用程序。我使用Cordova Geolocation API并且正在开发英特尔XDK环境。

在某些手机(例如Samsung S3和S4)中,API无法获取位置,而是返回超时错误。但是,有时它会在重新启动手机后起作用。

我需要一个稳定的解决方案,因为该位置对我的项目至关重要。这是我目前的代码:

navigator.geolocation.getCurrentPosition(geolocationSuccess,
                                         geolocationError,
                                         {maximumAge:0,timeout: 7000, enableHighAccuracy: true});

我尝试使用不同的参数调用getCurrentPosition(更改了maximumAge,timeout等),但似乎没有任何效果。

我能解决这个问题吗?是否有其他插件可以让我获得用户的位置?或者,我可以以某种方式使用手机的本机功能来获取位置吗?

2 个答案:

答案 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...

}