Said CHAOUCHE
Said CHAOUCHE

Reputation: 695

Titanium geolocation tracking not work correctly

I'm building an app that needs to track location of user and I use

Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST;
Ti.Geolocation.distanceFilter = 0;
Ti.Geolocation.preferredProvider = Ti.Geolocation.PROVIDER_GPS
Ti.Geolocation.addEventListener('location', locationChange);

On iOS when device is in the move the event is not fired regularly and when it's fired I dont have heading and speed ( even tested it on while driving )

...
heading : -1,
speed : -1
...

but if I run another navigation app on background (like Plans) the event is fired constantly and I have heading and speed of device, as if i'm only getting the events because the other apps.

its the same problem on android the event is not fired correctly

testing with ti SDK 5.1.2 and 5.5.1

Upvotes: 1

Views: 463

Answers (1)

Greg
Greg

Reputation: 1853

This has tripped me up in the past. Add Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST_FOR_NAVIGATION;

Also note that very small numbers in the distance filter may cause some problems.

I use this

if (OS_IOS) {
  Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST_FOR_NAVIGATION;
  Ti.Geolocation.distanceFilter = Alloy.CFG.minUpdateDistance;
  Ti.Geolocation.preferredProvider = Ti.Geolocation.PROVIDER_GPS;
  Ti.Geolocation.pauseLocationUpdateAutomatically = true;
  Ti.Geolocation.activityType = Ti.Geolocation.ACTIVITYTYPE_OTHER_NAVIGATION;
} else { //Android  
  Ti.Geolocation.Android.manualMode = true;
  var gpsProvider = Ti.Geolocation.Android.createLocationProvider({
      name:              Ti.Geolocation.PROVIDER_GPS,
      minUpdateTime:     Alloy.CFG.minAge / 1000,
      minUpdateDistance: Alloy.CFG.minUpdateDistance
  });

  var gpsRule = Ti.Geolocation.Android.createLocationRule({
      provider: Ti.Geolocation.PROVIDER_GPS,
      accuracy: Alloy.CFG.accuracy,
      maxAge:   Alloy.CFG.maxAge,
      minAge:   Alloy.CFG.minAge,
  });

  Ti.Geolocation.Android.addLocationProvider(gpsProvider);
  Ti.Geolocation.Android.addLocationRule(gpsRule);
  Ti.Geolocation.Android.manualMode = true;
}

The Alloy.CFG settings are set in the config.json file.

{ 
 "global": {
   "minUpdateDistance": 10,
   "os:android": {
     "accuracy": 20,
     "minAge": 10000,
     "maxAge": 30000
    },...

Upvotes: 1

Related Questions