Dans l'API Awareness, le concept de clôtures est issu du géorepérage, dans lequel une région géographique, ou géorepérage, est définie, et une application reçoit des rappels lorsqu'un utilisateur entre dans la région de géorepérage ou en sort. L'API Fence étend sur le concept de géorepérage pour inclure de nombreuses autres conditions de contexte en plus de la proximité géographique. Une application reçoit des rappels chaque fois que l'état du contexte change. Par exemple, si votre application définit une clôture pour les écouteurs, elle reçoit des rappels lorsque les écouteurs sont branchés et lorsqu'ils sont débranchés.
Vous pouvez utiliser l' API Fence pour définir des clôtures en fonction de signaux de contexte, tels que les suivants :
- La position actuelle de l'utilisateur (latitude/longitude)
- L'activité actuelle de l'utilisateur, comme la marche ou la conduite
- Conditions spécifiques à l'appareil, par exemple si les écouteurs sont branchés
- Proximité des balises à proximité
L'API Fence vous permet de combiner plusieurs
signaux de contexte
pour créer des clôtures avec les opérateurs booléens AND, OR et NOT. Votre application reçoit ensuite des rappels chaque fois que les conditions de la clôture sont remplies. Voici quelques exemples de
clôtures possibles :
- L'utilisateur branche ses écouteurs et commence à marcher.
- L'utilisateur entre dans une zone de géorepérage de 100 mètres avant 17h en semaine.
- L'utilisateur entre dans la zone d'une balise BLE spécifique.
L'exemple suivant montre comment définir une clôture qui s'active chaque fois que l'utilisateur marche :
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
Une fois que vous avez défini une clôture, vous devez procéder comme suit :
- Appelez
updateFencespour enregistrer la clôture afin de recevoir des rappels. - Définissez un rappel qui peut être appelé lorsque l'état de la clôture change.
L'exemple suivant montre une méthode qui crée et enregistre une clôture. Dans
cet exemple, une sous-classe personnalisée de BroadcastReceiver est utilisée pour gérer l'
intent lorsque la clôture est déclenchée.
Awareness.getFenceClient(this).updateFences(new FenceUpdateRequest.Builder()
.addFence(FENCE_KEY, exercisingWithHeadphonesFence, mPendingIntent)
.build())
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.i(TAG, "Fence was successfully registered.");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "Fence could not be registered: " + e);
}
});
public class FenceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
FenceState fenceState = FenceState.extract(intent);
if (TextUtils.equals(fenceState.getFenceKey(), FENCE_KEY)) {
String fenceStateStr;
switch (fenceState.getCurrentState()) {
case FenceState.TRUE:
fenceStateStr = "true";
break;
case FenceState.FALSE:
fenceStateStr = "false";
break;
case FenceState.UNKNOWN:
fenceStateStr = "unknown";
break;
default:
fenceStateStr = "unknown value";
}
mLogFragment.getLogView().println("Fence state: " + fenceStateStr);
}
}
}