PhoneGap 地理定位器使用 WiFi 而不是 GPS
Posted
技术标签:
【中文标题】PhoneGap 地理定位器使用 WiFi 而不是 GPS【英文标题】:PhoneGap geolocator using WiFi instead of GPS 【发布时间】:2013-10-02 15:29:57 【问题描述】:我正在尝试在 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 版(为了向后兼容其他功能)
【问题讨论】:
【参考方案1】:确保您在 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
您可能还想考虑使用this plugin 来检查设备上是否使用isGpsEnabled()
启用了GPS,如果没有,请使用switchToLocationSettings()
将用户引导至设置页面
希望对你有帮助...
【讨论】:
我实际上是在使用 PhoneGap 构建,所以我只是将功能名称添加到 config.xml以上是关于PhoneGap 地理定位器使用 WiFi 而不是 GPS的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google 地图进行地理定位无法使用 PhoneGap