2016-05-11 20 views
0

Ich möchte einen GPS-Track in einer App mit Titanium (Android für den Moment) speichern, aber ich weiß nicht, wie es geht.Titanium Appcelerator - Speichern GPS-Track

Mein Ziel wäre, die Position des Benutzers alle 5 Sekunden zu verfolgen und im Telefon zu speichern (in einer JSON-Datei, denke ich, wäre die bessere Lösung). Ich möchte, dass es sowohl im Hintergrund funktioniert, als auch wenn das Telefon kein Netzwerk hat. Und sobald das Telefon Netzwerk hat, möchte ich die Datei mit dem Server synchronisieren.

Ist es möglich?

Für den Moment, ich habe nur eine grundlegende Funktion (von appcelerator doc) mit einem setInterval ... aber die Position ist immer gleich, auch wenn ich mich bewege.

Hier ist mein Code:

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

}); 

Ich weiß nicht wirklich, wie das richtig zu machen. Wenn einige Leute kann mir helfen ... :)

Dank viel :)

+0

Können Sie das Code-Snippet veröffentlichen, das für die Geolocation verantwortlich ist? – Soumya

+0

Speichern Sie die GPS-Positionen in einer SQLite-Datenbank (Ti.Database) anstelle einer JSON-Datei. Und viel wichtiger: Verwenden Sie ein benutzerdefiniertes Modul, um signifikante Änderungen der GPS-Position zu verfolgen. Das mitgelieferte Geolocation-Modul (Ti.Geolocation) ist auf Android recht langsam und ungenau. – danny005

+0

@Soumya Ich habe mein Code-Schnipsel hinzugefügt :) –

Antwort

1

wenn Sie GPS-Position zu verfolgen, es ist besser, wenn Sie ein eventlistener Ti.Geolocation.addEventListener('location', function(e){ //same response returned by Titanium.Geolocation.getCurrentPosition() });

die Empfindlichkeit des Zuhörers eingestellt kann so eingestellt werden

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