java.lang.Object
com.esri.arcgisruntime.geotriggers.Geotrigger
Direct Known Subclasses:
FenceGeotrigger

public class Geotrigger extends Object
A condition monitored by a GeotriggerMonitor.

A Geotrigger defines a condition that can be continually monitored in real time. After the condition is met, the Geotrigger defines how a GeotriggerNotificationInfo can be used to inform the user.

A GeotriggerMonitor, created with the Geotrigger, handles monitoring and reporting.

You can create a FenceGeotrigger describing target areas, covered by spatial rules such as enter or exit. This type of spatial monitoring is also known as "Geofencing".

If a Geotrigger is defined in a GeotriggersInfo, check whether the GeotriggerFeed is of type LocationGeotriggerFeed and, if so, supply a LocationDataSource to provide your device location. Call LocationGeotriggerFeed.setLocationDataSource(LocationDataSource), passing your LocationDataSource; you can retrieve your location data source by calling, for example, LocationDisplay.getLocationDataSource(). If a Geotrigger is defined in a GeotriggersInfo, check whether the GeotriggerFeed is of type LocationGeotriggerFeed and, if so, supply a LocationDataSource to provide your device location. Set the LocationGeotriggerFeed.getLocationDataSource() to your LocationDataSource - for example, using the LocationDisplay.setLocationDataSource(LocationDataSource).

Since:
100.12.0
  • Field Details

  • Method Details

    • getFeed

      public GeotriggerFeed getFeed()
      Gets the GeotriggerFeed that is monitored for changes.

      You can construct a LocationGeotriggerFeed from any LocationDataSource. Typically, this shows the device location based on GPS, but can be any LocationDataSource.

      Returns:
      the GeotriggerFeed that is monitored for changes
      Since:
      100.12.0
    • getGeotriggerId

      public String getGeotriggerId()
      Gets a unique ID for the Geotrigger.
      Returns:
      a unique ID for the Geotrigger
      Since:
      100.13.0
    • getMessageExpression

      public ArcadeExpression getMessageExpression()
      Gets an ArcadeExpression that controls the notification details when a Geotrigger is met.

      The expression uses the Arcade language to generate notification information that can be:

      • a string literal that is the same for all notifications relating to this Geotrigger
      • information that is specific to the attributes of objects that met the Geotrigger
      The expression is evaluated whenever the Geotrigger condition is met, in order to populate the GeotriggerNotificationInfo.getMessage() property. Display this message to alert the user that the Geotrigger condition has been met. Note that the expression cannot be changed when the GeotriggerMonitor is running.

      For example, with a FenceGeotrigger, using the following expression:

      "You have " + $fencenotificationtype + " " + $fencefeature.area_name

      returns the GeotriggerNotification.getMessage() "You have entered Area A", where "area_name" is an attribute field on the FenceGeotriggerNotificationInfo.getFenceGeoElement().

      Optionally, the expression can return extra properties in addition to the message. For example, it could produce another string, suitable for logging to a database. To supply additional properties, write an arcade expression that evaluates to a dictionary of key value pairs.

      For example, the expression below results in a GeotriggerNotificationInfo.getMessage() of: "Hello world" and a GeotriggerNotificationInfo.getActions() list of either "startTracking" or "stopTracking":

      
       var action = IIf($fencenotificationtype == 'enter', 'stopTracking', 'startTracking');
       return {
         'message': 'Hello world',
         'actions': [ action ]
       }
       
      The ArcadeExpression must evaluate to either a string or a dictionary; see ArcadeExpression.getReturnType(). Note that this method —getMessageExpression() — returns an ArcadeExpression object, rather than a string.

      For more information on the available profile variables and functions for creating the message expression see the "Geotrigger Notification" profile at https://developers.arcgis.com/arcade/profiles/.

      Returns:
      an ArcadeExpression that controls the message when a Geotrigger is met, or null if none
      Since:
      100.12.0
      See Also:
    • setMessageExpression

      public void setMessageExpression(ArcadeExpression messageExpression)
      Sets an ArcadeExpression that controls notification details when a Geotrigger is met.

      The expression uses the Arcade language to generate notification information that can be:

      • a string literal that is the same for all notifications relating to this Geotrigger
      • information that is specific to the attributes of objects that met the Geotrigger
      The expression is evaluated whenever the Geotrigger condition is met in order to populate the GeotriggerNotificationInfo.getMessage() property. Display this message to alert the user that the Geotrigger condition has been met. Note that the expression cannot be changed when the GeotriggerMonitor is running.

      For example, with a FenceGeotrigger, using the following expression:

      "You have " + $fencenotificationtype + " " + $fencefeature.area_name

      returns the GeotriggerNotificationInfo.getMessage() "You have entered Area A", where "area_name" is an attribute field on the FenceGeotriggerNotificationInfo.getFenceGeoElement().

      Optionally, the expression can return extra properties in addition to the message. For example, it could produce another string, suitable for logging to a database. To supply additional properties, write an arcade expression that evaluates to a dictionary of key value pairs.

      For example, the expression below results in a GeotriggerNotificationInfo.getMessage() of: "Hello world" and a GeotriggerNotificationInfo.getActions() list of either "startTracking" or "stopTracking":

      
       var action = IIf($fencenotificationtype == 'enter', 'stopTracking', 'startTracking');
       return {
         'message': 'Hello world',
         'actions': [ action ]
       }
       
      The ArcadeExpression must evaluate to either a string or a dictionary; see ArcadeExpression.getReturnType(). Note that this method —setMessageExpression() — takes an ArcadeExpression object, rather than a string.

      For more information on the available profile variables and functions for creating the message expression see the "Geotrigger Notification" profile at https://developers.arcgis.com/arcade/profiles/.

      Parameters:
      messageExpression - an ArcadeExpression that controls the message when a Geotrigger is met
      Since:
      100.12.0
      See Also:
    • getName

      public String getName()
      Gets the name of the Geotrigger.
      Returns:
      the name of the Geotrigger
      Since:
      100.12.0
    • setName

      public void setName(String name)
      Sets the name of the Geotrigger.
      Parameters:
      name - the name of the Geotrigger
      Throws:
      IllegalArgumentException - if name is null
      Since:
      100.12.0
    • getRequestedActions

      public List<String> getRequestedActions()
      Gets a list of strings indicating the set of requested actions when a notification is delivered.

      This property shows the full list of recommended actions that the Geotrigger author intends to be taken. Note that there is no requirement to take any action when a notification is delivered, but these provide a way to understand the Geotrigger author's intention. Use this property to:

      • Display the expected behavior of a Geotrigger to the user, prior to monitoring.
      • Check that your app supports the expected actions for the Geotrigger.
      This list of strings shows the full set of recommended actions for any notifications from this Geotrigger. Individual GeotriggerNotificationInfo events may include a subset of these actions. The specific actions for an individual notification event (for example, when a given fence is entered) are shown in GeotriggerNotificationInfo.getActions(). To populate the list of actions for a notification, the getMessageExpression() must return a dictionary with the key "actions", and a value showing the list of action strings.

      The list of actions are simple strings, so you can use them to control any custom action you wish your app to perform.

      Returns:
      a list of strings indicating the set of requested actions when a notification is delivered
      Since:
      100.14.0