Questa sezione mostra come utilizzare l'API Snapshot per ottenere lo stato attuale di ciascuno dei tipi di contesto supportati. Per ulteriori informazioni, consulta la pagina Guida introduttiva. Per informazioni dettagliate sugli indicatori contestuali ritirati, apri la seguente nota espandibile:
Ottieni l'attività corrente
Per ottenere l'attività corrente dell'utente, chiama getDetectedActivity(), che restituisce un ActivityRecognitionResult
che contiene informazioni sulle attività più recenti dell'utente.
Il metodo getDetectedActivity() richiede l'autorizzazione
com.google.android.gms.permission.ACTIVITY_RECOGNITION. Aggiungi questa
autorizzazione a AndroidManifest.xml.
Per ottenere l'attività corrente dell'utente:
- Chiama getSnapshotClient()per creare un'istanza diSnapshotClient.
- Utilizza addOnSuccessListenerper creare unOnSuccessListenerin grado di rilevare unDetectedActivityResponse.
- Chiama il numero getStatus()per assicurarti che il risultato sia valido.
- Chiama il numero - DetectedActivityResponse.getActivityRecognitionResult()per restituire un- ActivityRecognitionResult. Puoi utilizzarlo per ottenere molti aspetti dell'attività attuale dell'utente. Ad esempio:- Chiama getMostProbableActivity()per ricevere solo l'attività più probabile.
- Chiama il numero getProbableActivities()per ricevere un elenco delle attività recenti classificate in base alla probabilità.
- Chiama getActivityConfidence()per restituire il valore di confidenza per un determinato tipo di attività.
- Chiama hasResult()per rilevare se unIntentcontiene unActivityRecognitionResult.
 
- Chiama 
Il seguente esempio di codice utilizza getMostProbableActivity()
per ottenere l'attività rilevata più probabile e per registrare il risultato nella
console:
Awareness.getSnapshotClient(this).getDetectedActivity()
    .addOnSuccessListener(new OnSuccessListener<DetectedActivityResponse>() {
        @Override
        public void onSuccess(DetectedActivityResponse dar) {
            ActivityRecognitionResult arr = dar.getActivityRecognitionResult();
            DetectedActivity probableActivity = arr.getMostProbableActivity();
            int confidence = probableActivity.getConfidence();
            String activityStr = probableActivity.toString();
            mLogFragment.getLogView().println("Activity: " + activityStr
                + ", Confidence: " + confidence + "/100");
        }
    })
Ottenere i beacon nelle vicinanze
Per ricevere informazioni sui beacon nelle vicinanze, chiama il numero getBeaconState().
I dati del beacon sono costituiti dal contenuto, dal tipo e dallo spazio dei nomi di eventuali allegati.
Il metodo getBeaconState() richiede l'autorizzazione android.permission.ACCESS_FINE_LOCATION. Aggiungi questa autorizzazione a AndroidManifest.xml.
Inoltre, devi attivare l'API Nearby Messages per il tuo progetto Google Developers Console. Per saperne di più, consulta Registrazione e chiavi API
e Guida introduttiva.
Per ottenere informazioni sui beacon nelle vicinanze, segui questi passaggi:
- Verifica se l'utente ha concesso le autorizzazioni richieste. Il seguente esempio verifica se è stata concessa l'autorizzazione - android.permission.ACCESS_FINE_LOCATION. In caso contrario, all'utente viene chiesto il consenso.- if (ContextCompat.checkSelfPermission( MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions( MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_LOCATION ); return; }
- Definisci un - BeaconState.TypeFilter. Vengono restituiti solo i beacon con allegati registrati con lo spazio dei nomi e il tipo specificati. Puoi anche filtrare in base a una corrispondenza byte per byte nel contenuto dell'allegato. Il seguente esempio mostra come creare un filtro per tipo:- private static final List<BeaconState.TypeFilter> BEACON_TYPE_FILTERS = Arrays.asList( BeaconState.TypeFilter.with( "my.beacon.namespace", "my-attachment-type"), BeaconState.TypeFilter.with( "my.other.namespace", "my-attachment-type"));
- Chiama il numero - getSnapshotClient.getBeaconState().
- Utilizza - addOnSuccessListenerper creare un- OnSuccessListenerin grado di rilevare un- BeaconStateResponse.
- Chiama il numero - getStatus()per assicurarti che il risultato sia valido.
- Chiama - BeaconStateResponse.getBeaconState()per restituire lo stato del beacon.
- Chiama il numero - BeaconState.getBeaconInfo()per ricevere un- BeaconState.BeaconInfo.
Il seguente esempio mostra come ottenere le informazioni sul beacon:
Awareness.getSnapshotClient(this).getBeaconState(BEACON_TYPE_FILTERS)
    .addOnSuccessListener(new OnSuccessListener<BeaconStateResponse>() {
        @Override
        public void onSuccess(BeaconStateResponse beaconStateResponse) {
            BeaconStateResult beaconStateResult = beaconStateResponse.getBeaconState();
            BeaconState.BeaconInfo beaconInfo = beaconStateResponse.getBeaconInfo();
        }
    })
Recupero dello stato delle cuffie
Per rilevare se le cuffie sono collegate al dispositivo, chiama getHeadphoneState(),
che crea uno stato di rilevamento HeadphoneStateResponse
con OnSuccessListener impostato per il rilevamento.
Puoi quindi chiamare il numero getHeadphoneState() per ottenere il HeadphoneState.
Per ottenere lo stato attuale delle cuffie, segui questi passaggi:
- Chiama il numero getSnapshotClient.getHeadphoneState().
- Utilizza addOnSuccessListenerper creare unOnSuccessListenerin grado di rilevare unHeadphoneStateResponse.
- Chiama il numero getStatus()per assicurarti che il risultato sia valido.
- In caso di esito positivo, chiama
HeadphoneStateResponse.getHeadphoneState()per restituire lo stato delle cuffie. Questo valore èPLUGGED_INoUNPLUGGED.
Il seguente esempio di codice mostra come utilizzare getHeadphoneState():
Awareness.getSnapshotClient(this).getHeadphoneState()
    .addOnSuccessListener(new OnSuccessListener<HeadphoneStateResponse>() {
        @Override
        public void onSuccess(HeadphoneStateResponse headphoneStateResponse) {
            HeadphoneState headphoneState = headphoneStateResponse.getHeadphoneState();
            boolean pluggedIn = headphoneState.getState() == HeadphoneState.PLUGGED_IN;
            String stateStr =
                "Headphones are " + (pluggedIn ? "plugged in" : "unplugged");
            mLogFragment.getLogView().println(stateStr);
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.e(TAG, "Could not get headphone state: " + e);
        }
    });
Ricevi località
Puoi ottenere la posizione attuale dell'utente (latitudine e longitudine) con una chiamata a getLocation(), che restituisce un LocationResponse.
Puoi quindi chiamare il numero LocationResponse.getLocation()
per ottenere un Location 
con i dati sulla posizione corrente.
Il metodo getLocation() richiede l'autorizzazione
android.permission.ACCESS_FINE_LOCATION. Aggiungi questa autorizzazione a
AndroidManifest.xml.
Per ottenere la posizione attuale, segui questi passaggi:
- Verifica se l'utente ha concesso le autorizzazioni richieste. Il seguente esempio controlla se è stata concessa l'autorizzazione - android.permission.ACCESS_FINE_LOCATION. In caso contrario, all'utente viene chiesto il consenso.- if (ContextCompat.checkSelfPermission( MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions( MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_LOCATION ); return; }
- Chiama il numero - getSnapshotClient.getLocation().
- Utilizza - addOnSuccessListenerper creare un- OnSuccessListenerin grado di rilevare un- LocationResponse.
- Chiama il numero - getStatus()per assicurarti che il risultato sia valido.
- Chiama il numero - LocationResponse.getLocation()per restituire l'attuale- Location.
L'esempio seguente mostra come ottenere la posizione attuale:
Awareness.getSnapshotClient(this).getLocation()
    .addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
        @Override
        public void onSuccess(LocationResponse locationResponse) {
            Location loc = locationResponse.getLocationResult();
        }
    })