3

我知道这个问题已被问过,但我已经尝试了所有建议的解决方案,似乎没有任何工作!Phonegap地理位置不适用于Android(Nexus设备)

我正在使用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来构建应用程序。

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

+0

是错误回调被调用? phonepap android使用HTML 5地理位置,所以如果它在浏览器上工作,它也应该在应用程序上工作 – jcesarmobile

+0

它应该但它不。我也遇到了同样的问题。该应用在Chrome中正常工作,但无法在Nexus设备上的包装应用中获取位置信息。 –

回答

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);