Phonegap 地理定位在安卓(Nexus 设备)上无法正常工作。

3
我知道这个问题以前已经被问过了,但我已经尝试了所有提出的解决方案,但似乎没有任何作用!
我正在开发一个使用Phonegap(+Angular,但我认为这不重要)构建的移动应用程序。在这个应用程序中,我正在使用地理位置插件。更具体地说,我的config.xml如下:
<?xml version="1.0" encoding="UTF-8" ?>
    <widget xmlns   = "http://www.w3.org/ns/widgets"
        xmlns:gap   = "http://phonegap.com/ns/1.0"
        id          = "......"
        version     = "1.0.0" >

    <name>.....</name>

    <preference name="permissions"                value="none"/>

    <preference name="orientation"                value="default" />
    <preference name="target-device"              value="universal" />
    <preference name="phonegap-version"           value="3.6.3" />

    <gap:plugin name="org.apache.cordova.geolocation" />
    <gap:plugin name="com.phonegap.plugins.PushPlugin" version="2.4.0" />
    <gap:plugin name="org.apache.cordova.network-information" />
    <gap:plugin name="org.apache.cordova.statusbar" />
    <gap:plugin name="org.apache.cordova.device" />
    <gap:plugin name="org.transistorsoft.cordova.background-geolocation"/>
</widget>

有时候我想获取用户的当前位置,所以我按照以下方式进行:

navigator.geolocation.getCurrentPosition(function (position) {
    .....
}, function (error) {}, {
    enableHighAccuracy: true,
    maximumAge: 30000,
    timeout: 10000
});

这段代码在iOS设备上运行良好,甚至在Android的ripple模拟器上也能正常工作。

但是当我尝试在Android设备上运行这个应用程序,特别是在Nexus 4和5上时,地理位置似乎无法正常工作。它并没有给我任何错误提示,只是一直在尝试检索位置却没有任何结果。

然而,所有其他使用地理定位的应用程序和浏览器中的地理定位都能够正常工作!

值得一提的是,我正在使用Phonegap Build来构建这个应用程序。

有人知道如何解决这个问题吗?是否有人遇到过同样的问题?


错误回调被调用了吗?PhoneGap Android 使用 HTML 5 地理定位,所以如果在浏览器上可以工作,那么在应用程序中也应该可以工作。 - jcesarmobile
它应该可以,但实际上不行。我也遇到了同样的问题。这个应用在Chrome中运行正常,但在Nexus设备上的封装应用中无法获取位置信息。 - Matt Kenefick
1个回答

0
从您的代码示例中,当您有一个空错误处理程序function (error) {}时,您如何知道没有引发错误? getCurrentPosition()为设备位置进行单个请求。如果仅调用一次,则位置超时可能会在设备上的GPS硬件有机会获取位置修复之前发生。
我建议使用watchPosition()来设置一个监视器,每当操作系统接收到位置更新时,它将调用成功函数。如果您只需要一个位置,则可以清除监视器,可选地检查是否具有可接受精度的位置。
例如:
var minAccuracyInMetres = 50;

var positionWatcher;

function onDeviceReady(){
    positionWatcher = navigator.geolocation.watchPosition(
      geolocationSuccess,
      geolocationError,
      {maximumAge:0, timeout: 10000, 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...

}

function geolocationError(error){
  console.warn("Error while retrieving current position. " + 
    "Error code: " + error.code + ",Message: " + error.message);
}

document.addEventListener("deviceready", onDeviceReady, false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接