Créer une clôture

Une clôture définit une ou plusieurs conditions de contexte auxquelles votre application peut réagir. Lorsqu'un état de clôture change, votre application reçoit un rappel.

Il existe deux types de clôtures : les clôtures primitives, qui représentent l'ensemble de base des signaux de contexte, et les clôtures combinées, qui combinent plusieurs clôtures primitives à l'aide d'opérateurs booléens. Toutes les clôtures sont des instances de AwarenessFence.

Créer une clôture primitive

Les clôtures primitives, qui représentent l'ensemble de base des signaux de contexte, sont définies dans le package awareness.fence. L'exemple suivant montre la création d'une barrière simple qui est TRUE lorsque l'activité détectée de l'utilisateur est WALKING et FALSE dans le cas contraire :

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

Dans l'exemple précédent, DetectedActivityFence a été créé par un appel à during, ce qui signifie que la barrière est à l'état TRUE chaque fois que l'utilisateur est WALKING.

Réagir aux transitions

Chaque type de clôture primitive, à l'exception de TimeFence, peut également être déclenché momentanément lors de la transition de l'état du contexte. Par exemple, vous pouvez définir un DetectedActivityFence pour qu'il se déclenche momentanément lorsqu'un utilisateur starting ou stopping une activité. Les barrières de transition sont à l'état TRUE pendant quelques secondes avant de repasser à l'état FALSE.

Créer une clôture combinée

Les clôtures combinées associent plusieurs types de clôtures primitives à l'aide d'opérateurs booléens. L'exemple suivant montre la création d'une clôture combinée qui s'active lorsque l'utilisateur marche et que le casque est branché :

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

Les arbres imbriqués de AND, OR et NOT sont valides. Toute combinaison booléenne de clôtures est donc possible. L'exemple suivant montre une clôture déclenchée lorsqu'un utilisateur s'éloigne de plus de 100 mètres de sa position actuelle ou lorsqu'une heure s'est écoulée depuis l'heure actuelle.

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

Étape suivante : Enregistrer une zone géographique.