Phonegap getCurrentPosition和watchPosition

时间:2012-05-02 10:49:52

标签: cordova

我读了这么多帖子。 我找不到解决方案。 我需要的是更新我目前的位置。所以,如果我继续前进,我需要知道(每5秒钟)我的新职位。我知道watchPosition不适用于IOS。

我从官方示例开始,我与setInterval混合

// Wait for PhoneGap to load
        //
        document.addEventListener("deviceready", onDeviceReady, false);

        // PhoneGap is ready
        //
        function onDeviceReady() {
            setInterval(navigator.geolocation.getCurrentPosition(onSuccess, onError),5000);
        }

        // onSuccess Geolocation
        //
        function onSuccess(position) {
            alert("ENTRY");
            var element = document.getElementById('geolocation');
            element.innerHTML = 'Latitude: '           + position.coords.latitude              + '<br />' +
            'Longitude: '          + position.coords.longitude             + '<br />' +
            'Altitude: '           + position.coords.altitude              + '<br />' +
            'Accuracy: '           + position.coords.accuracy              + '<br />' +
            'Altitude Accuracy: '  + position.coords.altitudeAccuracy      + '<br />' +
            'Heading: '            + position.coords.heading               + '<br />' +
            'Speed: '              + position.coords.speed                 + '<br />' +
            'Timestamp: '          + new Date(position.timestamp)          + '<br />';
        }

        // onError Callback receives a PositionError object
        //
        function onError(error) {
            alert('code: '    + error.code    + '\n' +
                  'message: ' + error.message + '\n');
        }

结果是我只看到了所有信息的一次。然后停下来。 有人能帮助我吗?

3 个答案:

答案 0 :(得分:1)

使用最新的Cordova(Phonegap),watchPosition在iOS上运行正常。也许你应该再试一次这个方法,因为看起来它正是你想要的。

答案 1 :(得分:1)

我有同样的问题,在IOS6上,无论是否使用网络应用程序,不会触发watchposition回调。看来IOS6打破了watchPosition。在开始它发射一次或两次,就是这样。一旦失败,手表或getposition的进一步调用不会触发成功或失败的回调。

我发现的工作是打开IOS 6中引入的地图应用程序,然后点击位置箭头找到自己。在尝试这个之后,回调会每隔一秒左右按预期启动。

此外,只要您在使用GPS接收器的地方以外,它似乎能保持良好运行状态。

我向苹果提交了错误。

我可以收集的是地图正在执行初始化例程以打开API ...

WatchPosition在IOS6之前一直运作良好。

答案 2 :(得分:0)

我认为问题在于您将传递给setInterval而不是函数。你应该有更多这样的东西:

setInterval( function(){
    navigator.geolocation.getCurrentPosition(onSuccess, onError);
},
5000);

正如你现在所做的那样,getCurrentPosition运行一次,将位置返回到setInterval函数...然后每隔5秒调用位置(而不是getCurrentPosition 函数),这是毫无意义的。