Descripción general de la API de cerca

En la API de Awareness, el concepto de vallas se toma del geovallado, en el que se define una región geográfica o geovalla, y una app recibe devoluciones de llamada cuando un usuario entra o sale de la región de la geovalla. La API de Fence amplía el concepto de geovalla para incluir muchas otras condiciones de contexto además de la proximidad geográfica. Una app recibe devoluciones de llamada cada vez que el estado del contexto realiza una transición. Por ejemplo, si tu app define una barrera para los 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 y longitud)
  • Es 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 los 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 posibles vallas:

  • El usuario conecta los auriculares y comienza a caminar.
  • El usuario ingresa a una zona geográfica de 100 metros antes de las 5 p.m. en un día laboral.
  • El usuario ingresa en el rango de una baliza BLE específica.

En el siguiente ejemplo, se muestra cómo definir una barrera 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 barrera 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 barrera. En este ejemplo, se usa una subclase personalizada de BroadcastReceiver para controlar la intención cuando se activa la barrera.

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