Create a fence

A fence defines one or more context conditions to which your app can react. When a fence's state changes, your app receives a callback.

There are two types of fences: primitive fences, which represent the basic set of context signals, and combination fences, which combine multiple primitive fences with the use of boolean operators. All fences are instances of AwarenessFence .

Create a primitive fence

Primitive fences, which represent the basic set of context signals, are defined in the awareness.fence package. The following example shows the creation of a simple fence that's TRUE when the user's detected activity is WALKING , and FALSE otherwise:

 AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING); 

In the preceding example, the DetectedActivityFence was created by a call to during , which means the fence is in the TRUE state whenever the user is WALKING .

React to transitions

Each primitive fence type, with the exception of TimeFence , can also be triggered momentarily when the context state transitions. For example, you can set a DetectedActivityFence to momentarily trigger when a user is starting or stopping an activity. Transition fences are in the TRUE state for a few seconds before they turn FALSE again.

Create a combination fence

Combination fences combine multiple primitive fence types with the use of boolean operators. The following example shows the creation of a combination fence that activates when the user walks and the headphones are plugged in:

  // Create the primitive fences. 
 AwarenessFence 
  
 walkingFence 
  
 = 
  
 DetectedActivityFence 
 . 
 during 
 ( 
 DetectedActivityFence 
 . 
 WALKING 
 ); 
 AwarenessFence 
  
 headphoneFence 
  
 = 
  
 HeadphoneFence 
 . 
 during 
 ( 
 HeadphoneState 
 . 
 PLUGGED_IN 
 ); 
 // Create a combination fence to AND primitive fences. 
 AwarenessFence 
  
 walkingWithHeadphones 
  
 = 
  
 AwarenessFence 
 . 
 and 
 ( 
  
 walkingFence 
 , 
  
 headphoneFence 
 ); 
 

Nested trees of AND , OR and NOT are valid, so any boolean combination of fences is possible. The following example shows a fence that's triggered when a user moves more than 100 meters from the current location, or over an hour has elapsed since the current time.

 double currentLocationLat;  // current location latitude
double currentLocationLng;  // current location longitude
long nowMillis = System.currentTimeMillis();
long oneHourMillis = 1L * 60L * 
60L * 1000L;

AwarenessFence orExample = AwarenessFence.or(
        AwarenessFence.not(LocationFence.in(
                currentLocationLat,
                currentLocationLng,
                100.0,
                100.0,
                0L)),
        TimeFence.inInterval(nowMillis + oneHourMillis, Long.MAX_VALUE)); 

Next step: Register a fence .

Create a Mobile Website
View Site in Mobile | Classic
Share by: