Titanium Appcelerator - Сохранить трек GPS

Я хотел бы сохранить GPS-трек в приложении, созданном с помощью Titanium (на данный момент Android), но я не знаю, как это сделать.

Моей целью было бы отслеживать положение пользователя каждые 5 секунд и сохранять его в телефоне (в файле JSON, я думаю, было бы лучшим решением). Я хочу, чтобы он функционировал как в фоновом режиме, так и если в телефоне нет сети. И раз у телефона есть сеть, я хочу синхронизировать файл с сервером.

Является ли это возможным ?

На данный момент я просто поместил базовую функцию (из документа appcelerator) с setInterval ... но позиция всегда одна и та же, даже если я двигаюсь.

Вот мой код:

function save(){
    setInterval(function(){
        if (Ti.Geolocation.locationServicesEnabled) {
            Titanium.Geolocation.purpose = 'Get Current Location';
            Titanium.Geolocation.distanceFilter = 1 ;
            Titanium.Geolocation.getCurrentPosition(function(e) {
                if (e.error) {
                    Ti.API.error('Error: ' + e.error);
                } else {
                    Ti.API.info(e.coords.altitude);
                    Ti.API.info(e.coords.heading);
                    Ti.API.info(e.coords.latitude);
                    Ti.API.info(e.coords.longitude);
                    Ti.API.info(e.coords.speed);

                    alert('LAT : '+e.coords.latitude+' LONG : '+e.coords.longitude+' SPEED : '+e.coords.speed+' ALT : '+e.coords.altitude);
                }
            });
        } else {
            alert('Please enable location services');
        }

    }, 5000);
}

save_button.addEventListener('click', function(){

    save();

});

Я действительно не знаю, как это сделать правильно. Если кто-то может мне помочь... :)

Большое спасибо :)


person Clément    schedule 11.05.2016    source источник
comment
Можете ли вы опубликовать фрагмент кода, отвечающий за получение геолокации?   -  person Soumya    schedule 11.05.2016
comment
Сохраните позиции GPS в базе данных SQLite (Ti.Database) вместо файла JSON. И что еще более важно: используйте пользовательский модуль для отслеживания значительных изменений местоположения GPS. Предоставленный модуль геолокации (Ti.Geolocation) работает на Android довольно медленно и неточно.   -  person danny005    schedule 12.05.2016
comment
@Soumya Я добавил свой фрагмент кода :)   -  person Clément    schedule 12.05.2016
comment
@ danny005, Итак, одна «ВСТАВКА» каждые 5 секунд? Можете ли вы сказать мне, почему это лучше? А не подскажете название модуля? :) Спасибо !   -  person Clément    schedule 12.05.2016
comment
да, одна вставка каждые 5 секунд. С точки зрения производительности намного лучше, чем текстовый файл, если у вас много записей. У меня есть настраиваемый модуль геолокации (на основе FusedLocationProviderApi, как в Google Maps), но он не с открытым исходным кодом и не бесплатный.   -  person danny005    schedule 12.05.2016
comment
Ваш фрагмент кода, кстати, не обновлен. См. пример здесь (и с обсуждением обновлений местоположения): archive.appcelerator.com/topic/846/   -  person danny005    schedule 12.05.2016
comment
Почему бы не зарегистрироваться на локационное мероприятие. Это будет уволено при изменении местоположения? Можете ли вы попробовать это и посмотреть, генерируется ли движение. Также подтвердите установленную точность. Здесь будет учитываться.   -  person Soumya    schedule 12.05.2016
comment
Проверьте этот проект: github.com/FokkeZB/Tracker =)   -  person Jagu    schedule 12.05.2016
comment
Кажется... сложно :D Но я попробую. Спасибо за ответ ! :)   -  person Clément    schedule 15.05.2016


Ответы (1)


если вы хотите отслеживать положение GPS, лучше установить eventListener Ti.Geolocation.addEventListener('location', function(e){ //same response returned by Titanium.Geolocation.getCurrentPosition() });

чувствительность слушателя можно настроить так

Ti.Geolocation.Android.manualMode = true;

function androidProviderConfig(provider) {
    var providerGps = Ti.Geolocation.Android.createLocationProvider({
        name : provider,
        minUpdateDistance : 100,
        //minUpdateTime: 60
    });
    Ti.Geolocation.Android.addLocationProvider(providerGps);
    var gpsRule = Ti.Geolocation.Android.createLocationRule({
        provider : provider,
        accuracy : 50,
        maxAge : 20 * 60 * 1000, // 1h
        minAge : 10 * 1000 // 10 seconde
    });
    Ti.Geolocation.Android.addLocationRule(gpsRule);
}

//androidProviderConfig(Ti.Geolocation.PROVIDER_NETWORK);
//or
androidProviderConfig(Ti.Geolocation.PROVIDER_GPS);
Ti.Geolocation.addEventListener('location', function(e){/*your callback*/});
person Said CHAOUCHE    schedule 19.05.2016