Snapshot-Daten abrufen

In diesem Abschnitt wird beschrieben, wie Sie mit der Snapshot API den aktuellen Status für die einzelnen unterstützten Kontexttypen abrufen. Weitere Informationen finden Sie unter Erste Schritte. Weitere Informationen zu eingestellten kontextbezogenen Signalen finden Sie in der folgenden aufklappbaren Mitteilung:

Aktuelle Aktivität abrufen

Rufen Sie getDetectedActivity() auf, um die aktuelle Aktivität des Nutzers abzurufen. Dadurch wird ein ActivityRecognitionResult zurückgegeben, das Informationen zu den letzten Aktivitäten des Nutzers enthält.

Für die Methode getDetectedActivity() ist die Berechtigung com.google.android.gms.permission.ACTIVITY_RECOGNITION erforderlich. Fügen Sie diese Berechtigung zu AndroidManifest.xml hinzu.

So rufen Sie die aktuelle Aktivität des Nutzers ab:

  1. Rufen Sie getSnapshotClient() auf, um eine Instanz von SnapshotClient zu erstellen.
  2. Verwenden Sie addOnSuccessListener, um einen OnSuccessListener zu erstellen, der auf ein DetectedActivityResponse warten kann.
  3. Rufen Sie getStatus() auf, um sicherzustellen, dass das Ergebnis gültig ist.
  4. Rufen Sie DetectedActivityResponse.getActivityRecognitionResult() auf, um ein ActivityRecognitionResult zurückzugeben. Damit können Sie viele Aspekte der aktuellen Aktivität des Nutzers abrufen. Beispiel:

Im folgenden Codebeispiel wird getMostProbableActivity() verwendet, um die wahrscheinlichste erkannte Aktivität abzurufen und das Ergebnis in der Konsole zu protokollieren:

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

Beacons in der Nähe abrufen

Wenn Sie Informationen zu Beacons in der Nähe erhalten möchten, rufen Sie getBeaconState() auf. Beacon-Daten bestehen aus dem Inhalt, dem Typ und dem Namespace aller Anhänge.

Für die Methode getBeaconState() ist die Berechtigung android.permission.ACCESS_FINE_LOCATION erforderlich. Fügen Sie diese Berechtigung zu AndroidManifest.xml hinzu. Außerdem müssen Sie die Nearby Messages API für Ihr Google Developers Console-Projekt aktivieren. Weitere Informationen finden Sie unter Registrierung und API-Schlüssel und Erste Schritte.

So rufen Sie Informationen zu Beacons in der Nähe ab:

  1. Prüfen Sie, ob der Nutzer die erforderlichen Berechtigungen erteilt hat. Im folgenden Beispiel wird geprüft, ob die Berechtigung android.permission.ACCESS_FINE_LOCATION erteilt wurde. Andernfalls wird der Nutzer um Einwilligung gebeten.

    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. Definieren Sie eine BeaconState.TypeFilter. Es werden nur Beacons mit Anhängen zurückgegeben, die mit dem angegebenen Namespace und Typ registriert sind. Sie können auch nach einer Byte-für-Byte-Übereinstimmung des Anhanginhalts filtern. Das folgende Beispiel zeigt, wie ein Typfilter erstellt wird:

    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. Rufen Sie getSnapshotClient.getBeaconState() auf.

  4. Verwenden Sie addOnSuccessListener, um einen OnSuccessListener zu erstellen, der auf ein BeaconStateResponse warten kann.

  5. Rufen Sie getStatus() auf, um sicherzustellen, dass das Ergebnis gültig ist.

  6. Rufen Sie BeaconStateResponse.getBeaconState() auf, um den Beacon-Status zurückzugeben.

  7. Rufen Sie BeaconState.getBeaconInfo() auf, um eine BeaconState.BeaconInfo abzurufen.

Das folgende Beispiel zeigt, wie Sie Beacon-Informationen abrufen:

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

Kopfhörerstatus abrufen

Rufen Sie getHeadphoneState() auf, um zu erkennen, ob Kopfhörer an das Gerät angeschlossen sind. Dadurch wird ein HeadphoneStateResponse-Erkennungsstatus mit OnSuccessListener auf „detect“ gesetzt. Anschließend können Sie getHeadphoneState() aufrufen, um HeadphoneState abzurufen.

So rufst du den aktuellen Kopfhörerstatus ab:

  1. Rufen Sie getSnapshotClient.getHeadphoneState() auf.
  2. Verwenden Sie addOnSuccessListener, um einen OnSuccessListener zu erstellen, der auf ein HeadphoneStateResponse warten kann.
  3. Rufen Sie getStatus() auf, um sicherzustellen, dass das Ergebnis gültig ist.
  4. Rufen Sie bei Erfolg HeadphoneStateResponse.getHeadphoneState() auf, um den Kopfhörerstatus zurückzugeben. Dieser Wert ist entweder PLUGGED_IN oder UNPLUGGED.

Das folgende Codebeispiel zeigt, wie getHeadphoneState() verwendet wird:

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

Standort abrufen

Sie können den aktuellen Standort des Nutzers (Breiten- und Längengrad) mit einem Aufruf von getLocation() abrufen. Dadurch wird ein LocationResponse zurückgegeben. Anschließend können Sie LocationResponse.getLocation() aufrufen, um ein Location mit den aktuellen Standortdaten zu erhalten.

Für die Methode getLocation() ist die Berechtigung android.permission.ACCESS_FINE_LOCATION erforderlich. Fügen Sie diese Berechtigung zu AndroidManifest.xml hinzu.

So rufen Sie den aktuellen Standort ab:

  1. Prüfen Sie, ob der Nutzer die erforderlichen Berechtigungen erteilt hat. Im folgenden Beispiel wird geprüft, ob die Berechtigung android.permission.ACCESS_FINE_LOCATION erteilt wurde. Andernfalls wird der Nutzer um Einwilligung gebeten.

    
    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. Rufen Sie getSnapshotClient.getLocation() auf.

  3. Verwenden Sie addOnSuccessListener, um einen OnSuccessListener zu erstellen, der auf ein LocationResponse warten kann.

  4. Rufen Sie getStatus() auf, um sicherzustellen, dass das Ergebnis gültig ist.

  5. Rufen Sie LocationResponse.getLocation() auf, um die aktuelle Location zurückzugeben.

Im folgenden Beispiel wird gezeigt, wie der aktuelle Standort abgerufen wird:

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