0

我正在尝试在 Android 上运行的 PhoneGap 应用程序上实现地理定位。由于某种原因,定位器仅在连接 WiFi 时返回准确的距离(即它更喜欢粗略而不是精细)。我的 GPS 当然是启用的。请注意,该应用程序曾一度尝试使用 GPS(我看到定位器指示灯亮起),但一直超时;重新启动设备后,它又回到了仅使用 WiFi 的状态。附上我的代码:

function testGeo(){
        navigator.geolocation.getCurrentPosition(function(position){
            $('#latitude').html('');
            $('#longitude').html('');
            $('#accuracy').html('');
            $('#latitude').html(position.coords.latitude);
            $('#longitude').html(position.coords.longitude);
            $('#accuracy').html(position.coords.accuracy);
            $('#loading-frame-geo').hide();
        }, GeoError, {enableHighAccuracy:true,maximumAge:3000,timeout:10000});  
}

我正在使用 PhoneGap 2.5.0 版(为了向后兼容其他功能)

4

1 回答 1

0

确保您在 config.xml 中启用了地理位置:<plugin name="Geolocation" value="org.apache.cordova.GeoBroker"/>

在您的 AndroidManifest.xml 中:

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

还可以尝试将超时时间增加到 60000 - 旧设备可能需要一段时间才能获得 GPS 定位。

考虑使用navigator.geolocation.watchPosition而不是navigator.geolocation.getCurrentPosition. 这将添加一个观察者,该观察者在每次设备获取新位置时调用成功函数;如果尚未获得定位,将调用错误回调。

另一件事(我从经验中发现)是,如果 Android 失去其 GPS 定位,并且在 Position 对象中没有任何内容传递给成功函数来告诉您设备使用什么硬件来获取,Android 将默默地退回到 Wifi 或小区三角测量它的位置。但是,您可以从准确性推断它并丢弃任何太不准确的位置,例如:

MIN_ACCURACY = 20; //metres

function success(position){
  if(position.coords.accuracy > MIN_ACCURACY){
    console.log("Position rejected because accuracy is less than required "+MIN_ACCURACY+" metres");
    return;
  }
  // else, do some stuff with the position
}

您可能还需要考虑使用此插件来检查设备上是否启用了 GPS isGpsEnabled(),如果没有,请使用以下命令将用户定向到设置页面switchToLocationSettings()

希望能帮助到你...

于 2013-10-02T18:20:37.427 回答