Phonegap地理位置无法在Android上运行(Nexus设备)

时间:2015-04-20 20:16:39

标签: android cordova geolocation phonegap-build phonegap-gmaps-plugin

我知道之前已经问过这个问题,但我已经尝试了所有提出的解决方案,似乎没有任何效果!

我正在开发一个使用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的涟漪仿真器。

但是当我尝试在Android上运行应用程序时,更具体地说是在Nexus 4和5上运行应用程序时,地理位置似乎不起作用。这不是因为它给了我一个错误,它只是试图找回没有任何运气的位置。

但是,使用地理定位的所有其他应用程序以及浏览器中的地理定位工作都非常好!

我还要注意,我正在使用Phonegap Build来构建应用程序。

有谁知道如何解决这个问题?有没有人有同样的问题?

1 个答案:

答案 0 :(得分: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);
相关问题