Release history Android - go to homepage
Release history Android logo

Release history Android

Trimble Precision SDK for Catalyst (Facade) Android

Below is a list of all major TPSDK for Android. Releases come typically in pairs - for Java and Xamarin - to keep build numbers synchronized. Features are also valid for both flavors - Java and Xamarin - as they are based on the same core. So only the external interface changes between the mentioned flavors (more or less).



v2021.0.96.22908 targeting Android API 11; NDK R21

Trimble DA2 support and updates various internal components.

Please double check the breaking changes section due to Android 11 update.

Major feature update

Trimble DA2 support, works as any Bluetooth receiver and uses RSeries driver (e.g. Trimble.Ssi.Driver.CarpoBased.Driver.RSeries.Android)

  • Internal component update(s) and code clean-up

  • Unified platform update

Facade updates and changes

  • The facade will in case of a TCH survey now also handle the case when a better correction source is available. In the past the facade handled the case when a correction signal was lost - e.g. when a VRS connection is dropped due to no internet. Now the facade will automatically move back to VRS-RTK if available (or RTX-IP depending on the subscription). To handle this the TCH survey must get restarted; this is implemented via a function call in the facade startTrimbleCorrectionHubSurvey:

      restartCorrectionHub = new Runnable() { ... }
    
  • Added power events to show how to use the ISsiPower interface

  • Switched from jCenter to mavenCentral

Worth knowing and breaking changes

  • TPSDK targets Android 11/ API 30 in version 2021.X.

  • Android 11 drops backwards comparability flags related to calling other Android packages. For that reason review the applications manifest and compare it with the samples. In case of issues you may lack the following queries:

      <queries>
          <package android:name="com.trimble.bluebottle" />
          <package android:name="com.trimble.trimblemobilemanager" />
      </queries>
    
  • TPSDK disables NMEA outputs during the connection process. This is default behavior. To avoid issues with other software packages this behavior has/ can be changed:

    • TMM does not disable NMEA output anymore
    • TPSDK can be configured to ignore running NMEA outputs, see the [guide on this topic](\ref Guides_NmeaOutput)

Bug fixes

  • Android Facade: fixed SBAS satellite count in facade UI (not related to the interface)
  • Android Facade: fixed casting exception in off-the-shelf licensing

Known issues





v2020.3.11.21372 targeting Android API 10; NDK R21

This release focuses on R12i support including the corresponding calibrations.

Major feature update

Trimble R12i support

  • Receiver calibrations via interface or [TMM intents](\ref GuideTmmIntentCalibration)

  • Internal component update

Facade updates and changes

Worth knowing and breaking changes

  • TPSDK targets Android 10 in version 2020.3. Therefore there is by default no device serial number available - which was part of the license payload in the past. To ensure best application compatibility it is recommended to

    • Use SDK 2020.0 if your application targets Android 9
    • Use SDK 2020.3 or higher if your application targets Android 10 If there is a mix of Android SDK version it his highly recommended to keep the android.permission.READ_PHONE_STATE in place. In case you use 2020.3 the READ_PHONE_STATE may be dropped.
  • TMM v2.8 is build with Android 11.

Known issues




v2020.3.06.16422 targeting Android API 10; NDK R21

This release focuses on Android 10 support without breaking backwards comparability.

Major feature update

  • Unified platform update

  • Off-the-shelf licensing (no TID login for raw receiver output). Note that using off-the-shelf nulls all transformation objects as we can’t connect to web services required for certain actions here.

  • Web socket support for Android

  • Guardsquare Dexguard component update allowing to use Gradle plugin 4.X.

  • Two additional mock location/ web socket outputs (subscription type and satellite type)

Facade updates and changes

  • Example on how to use off-the-shelf licensing via the ReturnCode `LoadSubscription() function. Note the missing user (userTid is null)

  • Check methods bool IsDatumTransformationSupported() and bool IsVerticalAdjustmentSupported() for off-the-shelf licensing; because there is no TID we can’t download information on those topics. Hence any sort of transformation is NOT supported in case of off-the-shelf licensing.

Worth knowing and breaking changes

  • TPSDK targets Android 10 in version 2020.2. Therefore there is by default no device serial number available - which was part of the license payload in the past. To ensure best application compatibility it is recommended to

    • Use SDK 2020.0 if your application targets Android 9
    • Use SDK 2020.2 or higher if your application targets Android 10 If there is a mix of Android SDK version it his highly recommended to keep the android.permission.READ_PHONE_STATE in place. In case you use 2020.2 the READ_PHONE_STATE may be dropped.
  • TMM v2.7 is build with Android 11. Due to this several file location changes had to be made. The following list shows both legacy and new locations of various important files:

      var android10Location = DependencyService.Get<IOsSpecific>().StorageLocation;
    
      var correctionHubLegacyLocation = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Trimble/CorrectionHub";
      var correctionSettingsNewLocation = Path.Combine(android10Location, "Trimble/CorrectionHub");
    
      var licenseLegacyLocation = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Trimble/EMS";
      var licenseNewLocation = Path.Combine(android10Location, "Trimble/EMS");
    
      var geoLegacyLocation = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Geodata";
      var geoNewLocation = Path.Combine(android10Location, "GeoData");
    

Known issues



v2020.2.14.20939 targeting Android API 10; NDK R21

This release focuses on Android 10 support without breaking backwards comparability.

Major feature update

  • Full Android 10 comparability

Trimble and Spectra receivers)

Trimble R12i and full IMU support (on the SSI layer)

Facade updates and changes

  • The Facade turns IMU guided measurements off per default (CatalystFacade Portable, line 248).

      SetInertialNavigationMode(InertialNavigationMode.Off);
    

This is because a receiver drop may result in exceptions (IMU bias) not handled by the application. Therefore a developer must turn IMU guided measurements on and ideally also implement the required action items in case of [IMU bias issues](\ref Trimble.Ssi.Interfaces.Gnss.Positioning.RTKErrorStatus) (reboot, restart, IMU bias calibration etc.).

  • The facade implements new observations like ObservationType.ReferenceSource or ObservationType.GpsTime and shows how to get to UTC time

  • The facade shows how to install option codes as used in receiver subscriptions etc via InstallSubscriptions(string optionCode)

Worth knowing and breaking changes

  • TPSDK targets Android 10 in version 2020.2. Therefore there is by default no device serial number available - which was part of the license payload in the past. To ensure best application compatibility it is recommended to

    • Use SDK 2020.0 if your application targets Android 9
    • Use SDK 2020.2 if your application targets Android 10 If there is a mix of Android SDK version it his highly recommended to keep the android.permission.READ_PHONE_STATE in place. In case you use 2020.2 the READ_PHONE_STATE may be dropped.
  • TMM v2.6 is build with Android 10. Due to this several file location changes had to be made. The following list shows both legacy and new locations of various important files:

      var android10Location = DependencyService.Get<IOsSpecific>().StorageLocation;
    
      var correctionHubLegacyLocation = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Trimble/CorrectionHub";
      var correctionSettingsNewLocation = Path.Combine(android10Location, "Trimble/CorrectionHub");
    
      var licenseLegacyLocation = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Trimble/EMS";
      var licenseNewLocation = Path.Combine(android10Location, "Trimble/EMS");
    
      var geoLegacyLocation = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/Geodata";
      var geoNewLocation = Path.Combine(android10Location, "GeoData");
    

Known issues

  • As of the date of the release the Guardsquare Dexguard component odes not support Gradle 4.x plugin in Android Studio. Therefore Gradle plugin 3.6.x must be used. The SDK itself is based on Gradle 8.7.03 as of the date of this release.

\image html DexGuardGradleVersion.png \image latex DexGuardGradleVersion.png



v2020.0.82.19504 targeting Android API 9; NDK R21

This release focuses on adding generic geoid handling plus a deeper TMM integration.

Trimble Coordinate System Manager. TMM acts in this case as middle ware - so an application wanting to use geoid or msl heights should use the corresponding TMM intent (com.trimble.tmm.CORRECTIONSOURCESETTINGS) to configure all required parameters. More details can be found in the corresponding [section](\ref GuideTmmIntent).

Note that as of TMM v2.3 there is no option to side load unknown geoid files.

Major feature update

  • Generic geoid handling on all layers (TMM, Facade, SSI)

  • Improved Android Intents

Worth knowing and breaking changes

  • For applications using Android SDK 29 (Android 10) as compile SDK it is necessary to add requestLegacyExternalStorage to the application manifest of the facade if the facade is used.

      <application android:requestLegacyExternalStorage="true"> </application>
    
  • Facade shows now custom correction source intent; this intent was previously documented but not used in the facade sample.

  • Facade now handles NTRIP source table download directly; this is helpful when users have rare NTRIP caster software that behaves slightly different to most casters (like needing username/ password before returning the source table). This method is preferred compared to the handling within the IRtkSurvey interface.

  • TPSDK SSI eliminated ObservationType.HDSolutiontype mapping as it was redundant to SolutionType.HDRTK. This might got parsed in the OnNewPositioningObservations callback. The SolutionType.HDRTK still exists.

  • The position type GNSSObservationType.GroundCoordinate can be used for handling e.g. tilted measurements. This type can also be found in the facade.

          if (obs.hasObservation(GNSSObservationType.GroundCoordinate)) 
          {
              h = obs.getObservation(GNSSObservationType.GroundCoordinate).getCoordinates().getHeight();  //new ground type position, contains automatic height reduction if antenna height is provided
          }
          else if (obs.hasObservation(GNSSObservationType.Coordinate)) 
          {
              h = obs.getObservation(GNSSObservationType.Coordinate).getCoordinates().getHeight();	//traditional height
          }
    

??? Alternatively the [undulation](\ref trimble::jssi::interfaces::gnss::positioning::IGeoidUndulationObservation) can directly get parsed out (containing both the deviation and geoid model name as string):

        if (obs.hasObservation(GNSSObservationType.GeoidUndulation)) {
            double N = obs.getObservation(GNSSObservationType.GeoidUndulation).getDeviation();
            if( !Double.isNaN(height) && !Double.isNaN(N))
            {
                elevation = height + N;
            }
        }

??? In summary a GroundCoordinate contains all reductions known by the SDK. This may be just offset between APC and bottom plate or an applied tilted measurement.

  • In order to get GroundCoordinates the antenna height needs to be set before starting a survey. Therefore the antenna height has been removed from e.g. the data logging interfaces and centralized:

          ISsiAntenna antennaInterface = Sensor.GetInterface<ISsiAntenna>();
    
          IEnumerable<AntennaType> antennas = antennaInterface.ListSupportedAntennaTypes().ToList();
          if (antennas.Contains(AntennaType.External))
          {
              IAntennaExternal antenna = (IAntennaExternal)antennaInterface.GetAntenna(AntennaType.External);
              if (antenna != null)
              {
                  antenna.ID = "666";
                  antenna.HeightConfiguration = new AntennaHeightConfiguration("2", MeasurementMethod.MeasurementMethod0); //Measure method 0 -> bottom plate and 2m pole
              }
          }
          else
          {
              IAntennaInternal antenna = (IAntennaInternal)antennaInterface.GetAntenna(AntennaType.Internal);
              if (antenna != null)
              {
                  int antennaID = antenna.ID;
                  antenna.HeightConfiguration = antenna.HeightConfiguration = new AntennaHeightConfiguration("1.8", MeasurementMethod.AntennaPhaseCenter); //APC and 1.8m pole
    				
              }
          }
          antennaInterface.SetAntenna(antenna);
          }
    
  • TMM v2.3 adds next to the geoid handling new Location Extra information to Androids Location API (mslHeight, undulation and diffID).

Known issues

  • Datum auto detection is not working for new Canadian systems as the currently available polygons are not good enough. Autodetect will provide generic Canadian datum based on NAD83-CSRS (2002).


v2019.0.52.18770 targeting Android API 9; NDK 14b

This release adds R12 support and introduces also new observation types beneficial for the R12 receiver platform.
The release also addresses an issue with some phones which was introduced due to software obfuscation. In few cases it was possible that the device serial number read by TMM was not identical to the serial read via the SDK. Although both software’s use the same library there haven been obfuscation differences - which manifest themselves in different serial numbers. This issue is not deterministic but has happened. The fix is introducing a new (native) licensing component. This component requires new references inside solutions using the SDK - so please double check all native references while updating the SDK/ the facade (lib libTrimble.Licensing.CSWrapped.so needs to be added). For Java and Android Studio its sufficient to simply copy all so files into the corresponding directories (arm64-v8a, armeabi-v7a etc.), for Xamarin the so needs also to get referenced/ added in the Visual Studio Solution itself.

Major feature update

Trimble R12 receiver platform support

  • Using native LSI lib libTrimble.Licensing.CSWrapped.so (breaking change; although the interfaces haven’t change new native libs must be added to the solution)
  • Antenna height handling via new GNSSObservationType.GroundCoordinate observation type
  • SBAS support (was implicitly turned on before), can now be disabled via EnableSBASTracking within the Facade
  • Cleaned up Catalyst diagnostics log

Worth knowing and breaking changes

  • Facade shows now custom correction source intent; this intent was previously documented but not used in the facade sample.

  • Facade now handles NTRIP source table download directly; this is helpful when users have rare NTRIP caster software that behaves slightly different to most casters (like needing username/ password before returning the source table)

  • TPSDK SSI elimin1ated ObservationType.HDSolutiontype mapping as it was redundant to SolutionType.HDRTK. This might got parsed in the OnNewPositioningObservations callback. The SolutionType.HDRTK still exists.

  • A new position type GNSSObservationType.GroundCoordinate is introduced to improve handling of e.g. tilted measurements. This type can also be found in the facade.

          if (obs.hasObservation(GNSSObservationType.GroundCoordinate)) 
          {
              h = obs.getObservation(GNSSObservationType.GroundCoordinate).getCoordinates().getHeight();  //new ground type position, contains automatic height reduction if antenna height is provided
          }
          else if (obs.hasObservation(GNSSObservationType.Coordinate)) 
          {
              h = obs.getObservation(GNSSObservationType.Coordinate).getCoordinates().getHeight();	//traditional height
          }
    
  • In order to get GroundCoordinates the antenna height needs to be set before starting a survey. Therefore the antenna height has been removed from e.g. the data logging interfaces and centralized:

          ISsiAntenna antennaInterface = Sensor.GetInterface<ISsiAntenna>();
    
          IEnumerable<AntennaType> antennas = antennaInterface.ListSupportedAntennaTypes().ToList();
          if (antennas.Contains(AntennaType.External))
          {
              IAntennaExternal antenna = (IAntennaExternal)antennaInterface.GetAntenna(AntennaType.External);
              if (antenna != null)
              {
                  antenna.ID = "666";
                  antenna.HeightConfiguration = new AntennaHeightConfiguration("2", MeasurementMethod.MeasurementMethod0); //Measure method 0 -> bottom plate and 2m pole
              }
          }
          else
          {
              IAntennaInternal antenna = (IAntennaInternal)antennaInterface.GetAntenna(AntennaType.Internal);
              if (antenna != null)
              {
                  int antennaID = antenna.ID;
                  antenna.HeightConfiguration = antenna.HeightConfiguration = new AntennaHeightConfiguration("1.8", MeasurementMethod.AntennaPhaseCenter); //APC and 1.8m pole
    				
              }
          }
          antennaInterface.SetAntenna(antenna);
          }
    
  • The SBAS configuration within SSI is moved from ISsiStartRtkSurvey to ISsiSatellites. Basically SBAS is now treated as a satellite constellation like GPS or GLONASS, before it was treated as real time correction source.

          ISsiSatellites _satellitesInterface = Sensor.GetInterface<ISsiSatellites>();
          IEnumerable<SatelliteMaskParameterType> parameterTypes = _satellitesInterface.ListSupportedSatelliteMaskParameterTypes().ToList();
          var list = new List<ISatelliteMaskParameter>();
    
          if (parameterTypes.Contains(SatelliteMaskParameterType.TrackSBAS))
          {
              _trackSBASParameter = (ISatelliteMaskParameterTrackSBAS) _satellitesInterface.CreateSatelliteMaskParameter(SatelliteMaskParameterType.TrackSBAS);
              _trackSBASParameter.TrackSBAS = true;
              list.Add(_trackSBASParameter);
          }
    
          var mask = new SatelliteMask(list);
          _satellitesInterface.SetSatelliteMask(mask);
    

Known issues

  • Datum auto detection is not working for new Canadian systems as the currently available polygons are not good enough. Autodetect will provide generic Canadian datum based on NAD83-CSRS (2002).


v2018.0.285.18351 targeting Android API 8

This release is mainly a Facade update. There have been no changes to the SDK itself (minor internal improvements). Otherwise this release adds on-demand support to the facade.

Major feature update

  • Facade on-demand support: The facade contains now a button to launch the TMM on-demand intent page. This can be used as an example of how to integrate on-demand into an application.

Worth knowing

  • Facade shows now custom correction source intent; this intent was previously only documented but not used in the facade sample.
  • Facade now handles NTRIP source table download directly; this is helpful when users have rare NTRIP caster software that behaves slightly different to most casters (like needing username/ password before returning the source table)

Known issues

  • Datum auto detection is not working for new Canadian systems as the currently available polygons are not good enough. Autodetect will provide generic Canadian datum based on NAD83-CSRS (2002).


v2018.0.269.17798

Major feature update

Trimble TDC150 support Trimble EM100 module support

  • Android 9 build process updates

Worth knowing

  • See previous comments

Known issues

  • Datum auto detection is not working for new Canadian systems as the currently available polygons are not good enough. Autodetect will provide generic Canadian datum based on NAD83-CSRS (2002).

Breaking changes

  • SBAS setup has been moved out of the RTK interface and is now a like any other SV system (GPS, GLONASS etc)
  • Android project requires new/ additional permission (READ_PHONE_STATE) if targeting API 28 (Android 9) as the subscription needs the device serial which is now protected


v2018.0.238.16603

Minor feature update

  • Improvements for high frequency data output
  • Added Canadian datums (NAD83-CSRS (1997), NAD83-CSRS (2002), NAD83-CSRS (2010)

Worth knowing

  • See previous comments

Known issues

  • Datum auto detection is not working for new Canadian systems as the currently available polygons are not good enough. Autodetect will provide generic Canadian datum based on NAD83-CSRS (2002).

Breaking changes

  • none


v2018.0.233.16459

Major new features

Trimble Catalyst Service v1.1.2069 or later](https://play.google.com/store/apps/details?id=com.trimble.bluebottle&hl=en)

  • Added traditional receiver support (requires application subscription update - so a permanent licensed will be assigned to the product GUID as created during application registration) Trimble RSeries
    • SpectraPrecision SP Series

Worth knowing

Trimble Catalyst Service requires different handling due to the addition of GLONASS which gets set during service initialization. An application making use of GLONASS should migrate to the new SDK. Although the application will see GLONASS even without an update it might lead to slightly different behavior when compared to application targeting the latest SDK.

  • GLONASS support adds a small bit of additional CPU consumption (minimal hardware specs don’t change) and adds a 5-10% additional battery drain based on device type.
  • TPSDK for Catalyst targets Android 8.1 (target build version number).
  • TPSDK for Catalyst minimal Android version is 5.0 (minimal version number). Trimble RTX subscription.

Known issues

  • Switching between GLONASS and RTX SV tracking requires a reconnect to the service (power cycle of the service). While the facade handles this during e.g. a RTK link down event the application must do so if the applications wants to move back from RTX SV to RTK with GLONASS. A power cycle of the service will Trimble is working on improving this.

Breaking changes

  • none


v3.0.210.15759

Major new features

  • First TPSDK for Catalyst with Facade support.
  • Catalyst soft-gnss receiver support. Trimble Correction Hub support.

Worth knowing

  • TPSDK for Catalyst targets Android 7.0 (target build version number).
  • TPSDK for Catalyst minimal Android version is 5.0 (minimal version number).

Known issues

  • none

Breaking changes

  • none

Additional information

Its worth mentioning that the version numbers have a schema change from the first release to any following release. Due to internal trunk changes a migration from version numbers like v3.X as major build number got replaced by a year indicator major number.