Obtenir des données d'instantané

Cette section explique comment utiliser l'API Snapshot pour obtenir l'état actuel de chaque type de contexte compatible. Pour en savoir plus, consultez la section Premiers pas. Pour en savoir plus sur les signaux contextuels obsolètes, ouvrez l'avis extensible suivant :

Obtenir l'activité en cours

Pour obtenir l'activité actuelle de l'utilisateur, appelez getDetectedActivity(), qui renvoie un ActivityRecognitionResult contenant des informations sur les activités les plus récentes de l'utilisateur.

La méthode getDetectedActivity() nécessite l'autorisation com.google.android.gms.permission.ACTIVITY_RECOGNITION. Ajoutez cette autorisation à AndroidManifest.xml.

Pour obtenir l'activité actuelle de l'utilisateur, procédez comme suit :

  1. Appelez getSnapshotClient() pour créer une instance de SnapshotClient.
  2. Utilisez addOnSuccessListener pour créer un OnSuccessListener qui peut écouter un DetectedActivityResponse.
  3. Appelez getStatus() pour vous assurer que le résultat est valide.
  4. Appelez DetectedActivityResponse.getActivityRecognitionResult() pour renvoyer un ActivityRecognitionResult. Vous pouvez l'utiliser pour obtenir de nombreux aspects de l'activité actuelle de l'utilisateur. Exemple :

L'exemple de code suivant utilise getMostProbableActivity() pour obtenir l'activité détectée la plus probable et enregistrer le résultat dans la 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");
        }
    })

Obtenir les balises à proximité

Pour obtenir des informations sur les balises à proximité, appelez beacons, call getBeaconState(). Les données de balise se composent du contenu, du type et de l'espace de noms de toutes les pièces jointes.

La méthode getBeaconState() nécessite l'autorisation android.permission.ACCESS_FINE_LOCATION. Ajoutez cette autorisation à AndroidManifest.xml. De plus, vous devez activer l'API Nearby Messages pour votre projet Google Developers Console. Pour en savoir plus, consultez les pages Inscription et clés API et Premiers pas.

Pour obtenir des informations sur les balises à proximité, procédez comme suit :

  1. Vérifiez si l'utilisateur a accordé les autorisations requises. L'exemple suivant vérifie si l'autorisation android.permission.ACCESS_FINE_LOCATION est accordée. Si ce n'est pas le cas, l'utilisateur est invité à autoriser ou à refuser cette demande.

    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. Définissez un BeaconState.TypeFilter. Cette opération ne renvoie que les balises avec des pièces jointes enregistrées avec l'espace de noms et le type spécifiés. Vous pouvez également filtrer en fonction d'une correspondance octet par octet sur le contenu de la pièce jointe. L'exemple suivant montre comment créer un filtre de type :

    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. Appelez getSnapshotClient.getBeaconState().

  4. Utilisez addOnSuccessListener pour créer un OnSuccessListener qui peut écouter un BeaconStateResponse.

  5. Appelez getStatus() pour vous assurer que le résultat est valide.

  6. Appelez BeaconStateResponse.getBeaconState() pour renvoyer l'état de la balise.

  7. Appelez BeaconState.getBeaconInfo() pour obtenir un BeaconState.BeaconInfo.

L'exemple suivant montre comment obtenir des informations sur la balise :

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

Obtenir l'état des écouteurs

Pour détecter si des écouteurs sont branchés à l'appareil, appelez getHeadphoneState(), qui crée un état de détection HeadphoneStateResponse avec OnSuccessListener défini sur "détecter". Vous pouvez ensuite appeler getHeadphoneState() pour obtenir le HeadphoneState.

Pour obtenir l'état actuel des écouteurs, procédez comme suit :

  1. Appelez getSnapshotClient.getHeadphoneState().
  2. Utilisez addOnSuccessListener pour créer un OnSuccessListener qui peut écouter un HeadphoneStateResponse.
  3. Appelez getStatus() pour vous assurer que le résultat est valide.
  4. Si l'opération réussit, appelez HeadphoneStateResponse.getHeadphoneState() pour renvoyer l'état des écouteurs. Cette valeur est PLUGGED_IN ou UNPLUGGED.

L'exemple de code suivant montre comment utiliser 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);
        }
    });

Obtenir l'emplacement

Vous pouvez obtenir l'emplacement actuel de l'utilisateur (latitude-longitude) en appelant getLocation(), qui renvoie un LocationResponse. Vous pouvez ensuite appeler LocationResponse.getLocation() pour obtenir un Location avec les données d'emplacement actuelles.

La méthode getLocation() nécessite l'autorisation android.permission.ACCESS_FINE_LOCATION. Ajoutez cette autorisation à AndroidManifest.xml.

Pour obtenir l'emplacement actuel, procédez comme suit :

  1. Vérifiez si l'utilisateur a accordé les autorisations requises. L'exemple suivant vérifie si l'autorisation android.permission.ACCESS_FINE_LOCATION a été accordée. Si ce n'est pas le cas, l'utilisateur est invité à autoriser ou à refuser cette demande.

    
    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. Appelez getSnapshotClient.getLocation().

  3. Utilisez addOnSuccessListener pour créer un OnSuccessListener qui peut écouter un LocationResponse.

  4. Appelez getStatus() pour vous assurer que le résultat est valide.

  5. Appelez LocationResponse.getLocation() pour renvoyer le Location actuel.

L'exemple suivant montre comment obtenir l'emplacement actuel :

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