0

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

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

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

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

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

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

4

2 回答 2

0

打开 Android 项目清单并添加这些权限

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

然后重新编译并启动您的项目。

于 2015-03-20T13:08:41.740 回答
0

getCurrentPosition()对设备位置发出单个请求。如果在应用程序启动后立即调用,则超时(7000 毫秒/7 秒不是很长 - 我会增加到 30000)可能会在 GPS 硬件有机会获得定位之前发生。

我建议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...

}
于 2015-03-20T14:45:18.643 回答