我正在尝试在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版(为了向后兼容其他功能)
答案 0 :(得分: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
。这将添加一个观察者,每当设备获得新位置时,该观察者调用成功函数;如果尚未获得定位,则将调用错误回调。
另一件事(我从经验中发现)是,如果它失去了GPS定位,Android将无声地回退到Wifi或细胞三角测量,并且在传递给成功函数的Position对象中没有任何内容告诉你设备是什么硬件用来获取它的位置。但是,您可以从准确性推断出它并丢弃任何过于不准确的位置,例如:
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
}
您可能还需要考虑使用this plugin检查设备上是否启用了isGpsEnabled()
,如果没有,请将用户定向到switchToLocationSettings()
希望它有所帮助...