Phonegap GPS跟踪在30秒后停止插入sqlite数据库

时间:2016-03-22 01:53:32

标签: android ios sqlite cordova gps

我在存储旅程跟踪应用的位置数据时遇到问题。我在我的应用程序中使用加速度计和GPS位置。所有数据都存储在手机sqlite数据库中。加速度计的采样率为25ms,GPS为3000ms。因此,对于我放入数据库的每120个加速器读数,插入了一个GPS读数。

这完美地工作了大约30秒然后应用程序奇怪地停止添加GPS读数,但它继续添加加速度计读数。

以下是我的手表功能,每3秒钟从GPS获取读数。我使用它的原因是因为我以前遇到过插件的监视功能问题。

SetupWatch功能代码:

var activeWatch=null;
// sets up the interval at the specified frequency
function setupWatch(freq) {
    activeWatch = setInterval(watchLocation, freq);

}

// stop watching

function logout() {
    clearInterval(activeWatch);
}

观看功能代码:

function watchLocation() {
    var gcp = navigator.geolocation.getCurrentPosition(
           // Success
        function(position){
            newlongitude = position.coords.longitude;
            //alert("New "+newlongitude)
            newlatitude = position.coords.latitude;
            newSpeed = position.coords.speed;
            //alert(position.coords.speed);
            var timestamp = new Date().toISOString().slice(0, 19).replace('T', ' ');
            //alert(timestamp);

            insertDB(track_id, newlongitude,newlatitude,newSpeed,timestamp,row);
            row+=120;
        },

        // Error
        function(error){
            alert(error.message);
        }, {
                enableHighAccuracy: true
            });

}

以下是我用于将GPS读数插入数据库的功能。我使用sql update语句来更新已经使用GPS读数和当前罗盘方向指示的加速度计读数创建的行。

InsertDB功能代码:

function insertDB(trackID, longi,lat,speed, time,arow){
    //alert(Longi + " " + Lat);

    watch_Comp = navigator.compass.getCurrentHeading(onSuccess, onError,compassOptions);

        function onSuccess(heading) {
                    newDir = heading.magneticHeading;
                    //alert(newDir);
                    if(arow===0){
                    arow=1;
                    }
                    //alert("update row "+arow);

                    db.transaction(function(tx){
                    tx.executeSql('UPDATE DEMO SET longitude = '+'\''+longi+'\''+', latitude = '+'\''+lat+'\''+
                                ', speed = '+'\''+speed+'\''+ ', time = '+'\''+time+'\''+', direction = '+'\''+newDir+'\''+
                                ' WHERE uniqueID = ' + '\''+arow+'\'');
                    }, errorCB);

                };

                function onError(error) {
                    alert('CompassError: ' + error.code);
                };

                var compassOptions = {
                    frequency: 3000
                };

任何人都知道可能导致这种情况发生的原因是什么?

1 个答案:

答案 0 :(得分:0)

我明白了。它停止更新GPS数据的原因是它还没有创建它试图更新的行。当我开始跟踪我的旅程时,我首先启动加速度计手表,然后开始插入加速度计读数。然后我启动GPS手表,更新使用GPS读数创建的加速度计行。

问题在于加速度计手表必须对数据库进行多次插入,在3秒内有点慢,所以最终GPS手表赶上它并试图更新一行还没有创建。一旦GPS手表通过加速度计手表,我无法存储GPS读数。

解决这个问题的方法是将GPS手表减慢到3.5秒的采样率,或者从更新'加速器行排到'插入'。虽然如果将其更改为插入,则数据库中每三秒标记将有两行。这就是为什么我把它改为首先更新的原因。