Panoramica dell'API Fence
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Nell'API Awareness, il concetto di recinti è ripreso dal recinto virtuale, in cui viene definita una regione geografica o un recinto virtuale e un'app riceve callback quando un utente entra o esce dalla regione del recinto virtuale. L'API Fence espande il concetto di recinzione virtuale per includere molte altre condizioni di contesto oltre alla vicinanza geografica. Un'app riceve i callback ogni volta che lo stato del contesto cambia. Ad esempio, se la tua app definisce un recinto per le cuffie, riceve i callback quando le cuffie sono collegate e quando vengono scollegate.
Puoi utilizzare l'API Fence per definire recinti in base a indicatori di contesto, ad esempio:
- La posizione attuale dell'utente (latitudine/longitudine)
- L'attività corrente dell'utente, ad esempio camminare o guidare.
- Condizioni specifiche del dispositivo, ad esempio se le cuffie sono collegate.
- Vicinanza a beacon nelle vicinanze
L'API Fence ti consente di combinare più indicatori di contesto per creare recinti con operatori booleani AND
, OR
e NOT
. L'app riceve quindi callback ogni volta che le condizioni del recinto vengono soddisfatte. Ecco alcuni esempi di possibili recinti:
- L'utente collega le cuffie e inizia a camminare.
- L'utente entra in un recinto virtuale di 100 metri prima delle 17:00 in un giorno feriale.
- L'utente entra nel raggio d'azione di un beacon BLE specifico.
L'esempio seguente mostra come definire una recinzione che si attiva ogni volta che l'utente cammina:
AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
Una volta definito un recinto, devi:
- Chiama
updateFences
per registrare il recinto in modo che riceva i rilanci.
- Definisci un callback che può essere richiamato quando cambia lo stato del recinto.
L'esempio seguente mostra un metodo che crea e registra un recinto. In questo
esempio, viene utilizzata una sottoclasse personalizzata di BroadcastReceiver
per gestire l'intento quando viene attivato il recinto virtuale.
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);
}
}
}
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2025-08-31 UTC.
[null,null,["Ultimo aggiornamento 2025-08-31 UTC."],[[["\u003cp\u003eThe Awareness API uses fences, inspired by geofencing, to trigger app callbacks based on various context signals like location, user activity, and device conditions.\u003c/p\u003e\n"],["\u003cp\u003eYou can define fences using the Fence API by combining context signals with boolean operators (AND, OR, NOT) to create specific conditions.\u003c/p\u003e\n"],["\u003cp\u003eApps receive callbacks when a fence's conditions are met, such as when a user starts walking while wearing headphones or enters a designated area.\u003c/p\u003e\n"],["\u003cp\u003eTo utilize fences, register them using \u003ccode\u003eupdateFences\u003c/code\u003e and define a callback (e.g., using a \u003ccode\u003eBroadcastReceiver\u003c/code\u003e) to handle fence state changes.\u003c/p\u003e\n"]]],["The Fence API expands upon geofencing by allowing apps to define fences based on various context conditions. These include user location, activity, device status, and proximity to beacons. Fences can combine multiple context signals using boolean operators, triggering callbacks when conditions are met. To use a fence, you define it, register it via `updateFences`, and create a callback (like a `BroadcastReceiver`) to respond to state changes. The callback's state will reflect `TRUE`, `FALSE`, or `UNKNOWN`.\n"],null,["# Fence API overview\n\nIn the Awareness API, the concept of *fences* is taken from\n[geofencing](https://developer.android.com/training/location/geofencing),\nin which a geographic region, or *geofence*, is defined, and an app receives\ncallbacks when a user enters or leaves the geofence region. The Fence API expands on\nthe concept of geofencing to include many other context conditions in addition\nto geographical proximity. An app receives callbacks whenever the context\nstate transitions. For example, if your app defines a fence for headphones,\nit gets callbacks when the headphones are plugged in and when they're\nunplugged.\n\nYou can use the\n[Fence API](/android/reference/com/google/android/gms/awareness/Awareness#getFenceClient(android.app.Activity))\nto define fences based on context signals, such as the following:\n\n- The user's current location (latitude/longitude)\n- The user's current activity, like walking or driving.\n- Device-specific conditions, such as whether the headphones are plugged in.\n- Proximity to nearby beacons\n\nThe Fence API lets you combine multiple\n[context signals](/awareness/overview#context-types)\nto create fences with `AND`, `OR`, and `NOT` boolean operators. Your app then\nreceives callbacks whenever the fence conditions are met. Some examples of\npossible fences include the following:\n\n- User plugs in headphones and starts to walk.\n- User enters a 100-meter geofence before 5 PM on a weekday.\n- User enters range of a specific BLE beacon.\n\nThe following example shows how to define a fence that activates whenever\nthe user walks: \n\n AwarenessFence walkingFence = DetectedActivityFence.during(DetectedActivityFence.WALKING);\n\nOnce you've defined a fence, you must do the following:\n\n- Call [`updateFences`](/android/reference/com/google/android/gms/awareness/FenceClient#updateFences(com.google.android.gms.awareness.fence.FenceUpdateRequest)) to register the fence to receive callbacks.\n- Define a callback that can be invoked when the fence state changes.\n\nThe following example shows a method that creates and registers a fence. In\nthis example, a custom subclass of `BroadcastReceiver` is used to handle the\nintent when the fence is triggered. \n\n Awareness.getFenceClient(this).updateFences(new FenceUpdateRequest.Builder()\n .addFence(FENCE_KEY, exercisingWithHeadphonesFence, mPendingIntent)\n .build())\n .addOnSuccessListener(new OnSuccessListener\u003cVoid\u003e() {\n @Override\n public void onSuccess(Void aVoid) {\n Log.i(TAG, \"Fence was successfully registered.\");\n }\n })\n .addOnFailureListener(new OnFailureListener() {\n @Override\n public void onFailure(@NonNull Exception e) {\n Log.e(TAG, \"Fence could not be registered: \" + e);\n }\n });\n public class FenceReceiver extends BroadcastReceiver {\n @Override\n public void onReceive(Context context, Intent intent) {\n\n FenceState fenceState = FenceState.extract(intent);\n\n if (TextUtils.equals(fenceState.getFenceKey(), FENCE_KEY)) {\n String fenceStateStr;\n switch (fenceState.getCurrentState()) {\n case FenceState.TRUE:\n fenceStateStr = \"true\";\n break;\n case FenceState.FALSE:\n fenceStateStr = \"false\";\n break;\n case FenceState.UNKNOWN:\n fenceStateStr = \"unknown\";\n break;\n default:\n fenceStateStr = \"unknown value\";\n }\n mLogFragment.getLogView().println(\"Fence state: \" + fenceStateStr);\n }\n }\n }"]]