Descripción general de la API de cerca

En la API de Awareness, el concepto de vallas se toma de geocerca, en la que se define una región geográfica o geocerca, y una app recibe devoluciones de llamada cuando un usuario ingresa o sale de la región de la geocerca. La API de Fence amplía en el concepto de geocerca para incluir muchas otras condiciones de contexto, además de la proximidad geográfica. Una app recibe devoluciones de llamada cada vez que cambia el estado del contexto. Por ejemplo, si tu app define una valla para auriculares, recibe devoluciones de llamada cuando se conectan y cuando se desconectan.

Puedes usar la API de Fence para definir vallas basadas en indicadores de contexto, como los siguientes:

  • La ubicación actual del usuario (latitud/longitud)
  • La actividad actual del usuario, como caminar o conducir
  • Condiciones específicas del dispositivo, como si los auriculares están conectados
  • Proximidad a beacons cercanos

La API de Fence te permite combinar varios indicadores de contexto para crear vallas con operadores booleanos AND, OR y NOT. Luego, tu app recibe devoluciones de llamada cada vez que se cumplen las condiciones de la valla. Estos son algunos ejemplos de vallas posibles:

  • El usuario conecta los auriculares y comienza a caminar.
  • El usuario ingresa a una geocerca de 100 metros antes de las 5 p.m. en un día de la semana.
  • El usuario ingresa al rango de un beacon BLE específico.

En el siguiente ejemplo, se muestra cómo definir una valla que se activa cada vez que el usuario camina:

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

Una vez que hayas definido una valla, debes hacer lo siguiente:

  • Llama a updateFences para registrar la valla y recibir devoluciones de llamada.
  • Define una devolución de llamada que se pueda invocar cuando cambie el estado de la valla.

En el siguiente ejemplo, se muestra un método que crea y registra una valla. En este ejemplo, se usa una subclase personalizada de BroadcastReceiver para controlar el intent cuando se activa la valla.

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