2016-05-11 4 views
0

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

Моей целью было бы отслеживать положение пользователя каждые 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(); 

}); 

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

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

+0

Можете ли вы опубликовать фрагмент кода, отвечающий за получение геолокации? – Soumya

+0

Сохраните позиции GPS в базе данных SQLite (Ti.Database) вместо файла JSON. И что еще важнее: используйте специальный модуль для отслеживания значительных изменений местоположения GPS. Предоставленный геолокационный модуль (Ti.Geolocation) находится на Android довольно медленно и неточно. – danny005

+0

@Soumya Я добавил свой фрагмент кода :) –

ответ

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*/});