Recupero dati snapshot

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 Guida introduttiva. Per dettagli sugli indicatori contestuali deprecati, apri la seguente notifica espandibile:

Trovare l'attività corrente

Per recuperare 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 controllare l'attività corrente dell'utente, procedi nel seguente modo:

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

L'esempio di codice riportato di seguito utilizza getMostProbableActivity() per rilevare le attività più probabili 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");
        }
    })

Ricevi beacon nelle vicinanze

Per ottenere informazioni sui beacon nelle vicinanze, chiama getBeaconState(). I dati dei beacon sono i contenuti, il tipo e lo spazio dei nomi di tutti gli allegati.

Il metodo getBeaconState() richiede l'autorizzazione android.permission.ACCESS_FINE_LOCATION. Aggiungi questa autorizzazione a AndroidManifest.xml. Devi inoltre attivare l'API Nearby Messages per il tuo progetto Google Developers Console. Per ulteriori informazioni, consulta le sezioni Chiavi di registrazione e API e Inizia.

Per ottenere informazioni sui beacon nelle vicinanze, procedi nel seguente modo:

  1. Verifica se l'utente ha concesso le autorizzazioni richieste. Il seguente esempio controlla se l'autorizzazione android.permission.ACCESS_FINE_LOCATION è stata concessa. In caso contrario, all'utente viene richiesto 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. Questo restituisce solo i beacon con allegati che sono registrati con lo spazio dei nomi e il tipo specificati. Puoi anche applicare filtri in base a una corrispondenza byte per byte sui contenuti dell'allegato. L'esempio seguente mostra come creare un filtro tipo:

    private static final List 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 il numero getSnapshotClient.getBeaconState().

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

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

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

  7. Chiama il numero BeaconState.getBeaconInfo() per ricevere 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();
        }
    })

Conoscere lo stato delle cuffie

Per rilevare se le cuffie sono collegate al dispositivo, chiama getHeadphoneState(), creando così uno stato di rilevamento di HeadphoneStateResponse con OnSuccessListener impostato per il rilevamento. Puoi quindi chiamare getHeadphoneState() per ottenere la HeadphoneState.

Per conoscere lo stato attuale delle cuffie, procedi nel seguente modo:

  1. Chiama il numero getSnapshotClient.getHeadphoneState().
  2. Utilizza addOnSuccessListener per creare una OnSuccessListener che possa ascoltare HeadphoneStateResponse.
  3. Chiama il numero getStatus() per assicurarti che il risultato sia valido.
  4. Se l'operazione riesce, chiama HeadphoneStateResponse.getHeadphoneState() per restituire lo stato delle cuffie. Questo valore è PLUGGED_IN o UNPLUGGED.

Nel seguente esempio di codice viene mostrato 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);
        }
    });

Recuperare la località

Puoi ottenere la posizione attuale dell'utente (latitudine-longitudine) con una chiamata al numero getLocation(), che restituisce un risultato LocationResponse. Puoi quindi chiamare LocationResponse.getLocation() per ricevere un Location con i dati sulla posizione attuale.

Il metodo getLocation() richiede l'autorizzazione android.permission.ACCESS_FINE_LOCATION. Aggiungi questa autorizzazione a AndroidManifest.xml.

Per ottenere la posizione attuale:

  1. Verifica se l'utente ha concesso le autorizzazioni richieste. Il seguente esempio controlla se l'autorizzazione android.permission.ACCESS_FINE_LOCATION è stata concessa. In caso contrario, all'utente viene richiesto 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 il numero getSnapshotClient.getLocation().

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

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

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

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