Recupero dati snapshot

Questa sezione mostra come utilizzare l'API Snapshot per ottenere lo stato attuale di ciascuno dei tipi di contesto supportati. Per saperne di più, consulta Inizia. Per maggiori dettagli sugli indicatori di contesto ritirati, apri la seguente comunicazione espandibile:

Recupera l'attività corrente

Per ottenere l'attività corrente dell'utente, chiama getDetectedActivity(), che restituisce un ActivityRecognitionResult contenente 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, segui questi passaggi:

  1. Chiama getSnapshotClient() per creare un'istanza di SnapshotClient.
  2. Utilizza addOnSuccessListener per creare un OnSuccessListener che possa ascoltare un DetectedActivityResponse.
  3. Chiama il numero getStatus() per assicurarti che il risultato sia valido.
  4. Chiama DetectedActivityResponse.getActivityRecognitionResult() per restituire un ActivityRecognitionResult. Puoi utilizzarla per ottenere molti aspetti dell'attività corrente dell'utente. Ad esempio:

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

Recupera i beacon nelle vicinanze

Per ricevere informazioni sui beacon nelle vicinanze, chiama getBeaconState(). I dati dei beacon sono costituiti da contenuti, tipo e 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 Inizia.

Per ottenere informazioni sui beacon nelle vicinanze, segui questi passaggi:

  1. Verifica se l'utente ha concesso le autorizzazioni richieste. L'esempio seguente verifica se è stata concessa l'autorizzazione android.permission.ACCESS_FINE_LOCATION. In caso contrario, all'utente viene chiesto di fornire 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;
        }
    
  2. 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 del 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"));
    
  3. Chiama getSnapshotClient.getBeaconState().

  4. Utilizza addOnSuccessListener per creare un OnSuccessListener che possa ascoltare un BeaconStateResponse.

  5. Chiama il numero getStatus() per assicurarti che il risultato sia valido.

  6. Chiama BeaconStateResponse.getBeaconState() per restituire lo stato del beacon.

  7. Chiama il numero BeaconState.getBeaconInfo() per ottenere un BeaconState.BeaconInfo.

L'esempio seguente mostra come ottenere informazioni sui 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();
        }
    })

Ottenere lo stato delle cuffie

Per rilevare se le cuffie sono collegate al dispositivo, chiama getHeadphoneState(), che crea uno stato di rilevamento HeadphoneStateResponse con OnSuccessListener impostato su Detect. Puoi quindi chiamare getHeadphoneState() per ottenere HeadphoneState.

Per ottenere lo stato attuale delle cuffie, segui questi passaggi:

  1. Chiama getSnapshotClient.getHeadphoneState().
  2. Utilizza addOnSuccessListener per creare un OnSuccessListener che possa ascoltare un HeadphoneStateResponse.
  3. Chiama il numero getStatus() per assicurarti che il risultato sia valido.
  4. In caso di esito positivo, chiama HeadphoneStateResponse.getHeadphoneState() per restituire lo stato delle cuffie. Questo valore è PLUGGED_IN o UNPLUGGED.

L'esempio di codice seguente 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-longitudine) con una chiamata a getLocation(), che restituisce un LocationResponse. Puoi quindi chiamare LocationResponse.getLocation() per ottenere un Location con i dati sulla posizione attuali.

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:

  1. Verifica se l'utente ha concesso le autorizzazioni richieste. L'esempio seguente verifica se è stata concessa l'autorizzazione android.permission.ACCESS_FINE_LOCATION. In caso contrario, all'utente viene chiesto di fornire 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;
        }
    
  2. Chiama getSnapshotClient.getLocation().

  3. Utilizza addOnSuccessListener per creare un OnSuccessListener che possa ascoltare un LocationResponse.

  4. Chiama il numero getStatus() per assicurarti che il risultato sia valido.

  5. Chiama LocationResponse.getLocation() per restituire l'oggetto Location corrente.

L'esempio seguente mostra come ottenere la posizione corrente:

Awareness.getSnapshotClient(this).getLocation()
    .addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
        @Override
        public void onSuccess(LocationResponse locationResponse) {
            Location loc = locationResponse.getLocationResult();
        }
    })