Snapshot-Daten abrufen

In diesem Abschnitt wird beschrieben, wie Sie mit der Snapshot API den aktuellen Status für jeden der unterstützten Kontexttypen abrufen. Weitere Informationen finden Sie unter Erste Schritte. Details zu verworfenen Kontextsignalen finden Sie in der folgenden Expandable-Benachrichtigung:

Aktuelle Aktivität abrufen

Um die aktuelle Aktivität des Nutzers abzurufen, rufen Sie getDetectedActivity() auf. Dadurch wird ein ActivityRecognitionResult-Objekt mit Informationen zu den letzten Aktivitäten des Nutzers zurückgegeben.

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

Führen Sie die folgenden Schritte aus, um die aktuelle Aktivität des Nutzers abzurufen:

  1. Rufen Sie getSnapshotClient() auf, um eine Instanz von SnapshotClient zu erstellen.
  2. Erstellen Sie mit addOnSuccessListener ein OnSuccessListener-Element, das ein DetectedActivityResponse erfassen kann.
  3. Rufen Sie getStatus() auf, um zu prüfen, ob das Ergebnis gültig ist.
  4. Rufen Sie DetectedActivityResponse.getActivityRecognitionResult() auf, um einen ActivityRecognitionResult zurückzugeben. Damit können Sie viele Aspekte der aktuellen Nutzeraktivität erhalten. Beispiel:

Im folgenden Codebeispiel wird getMostProbableActivity() verwendet, um die am wahrscheinlichsten erkannte Aktivität zu erhalten 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() an. Beacon-Daten bestehen aus dem Inhalt, dem Typ und dem Namespace der Anhänge.

Für die Methode getBeaconState() ist die Berechtigung android.permission.ACCESS_FINE_LOCATION erforderlich. Fügen Sie diese Berechtigung für AndroidManifest.xml hinzu. Außerdem musst du die Nearby Messages API für dein Google Developers Console-Projekt aktivieren. Weitere Informationen finden Sie unter Registrierung und API-Schlüssel und Jetzt starten.

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

  1. Prüfen Sie, ob der Nutzer die erforderlichen Berechtigungen gewährt hat. Im folgenden Beispiel wird geprüft, ob die Berechtigung android.permission.ACCESS_FINE_LOCATION gewährt wird. Falls nicht, wird der Nutzer um seine 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 einen BeaconState.TypeFilter. Dadurch werden nur Beacons mit Anhängen zurückgegeben, die mit dem angegebenen Namespace und Typ registriert sind. Sie können auch anhand einer Byte-für-Byte-Übereinstimmung nach dem Anhangsinhalt filtern. Das folgende Beispiel zeigt, wie Sie einen Typfilter erstellen:

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

  4. Erstellen Sie mit addOnSuccessListener ein OnSuccessListener-Element, das ein BeaconStateResponse erfassen kann.

  5. Rufen Sie getStatus() auf, um zu prüfen, ob das Ergebnis gültig ist.

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

  7. Rufen Sie BeaconState.getBeaconInfo() auf, um einen BeaconState.BeaconInfo zu erhalten.

Im folgenden Beispiel sehen Sie, wie Beacon-Informationen abgerufen werden:

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

Um festzustellen, ob Kopfhörer an das Gerät angeschlossen sind, rufen Sie getHeadphoneState() auf. Dadurch wird ein HeadphoneStateResponse-Erkennungsstatus mit festgelegtem OnSuccessListener erstellt. Sie können dann getHeadphoneState() aufrufen, um die HeadphoneState abzurufen.

So rufen Sie den aktuellen Kopfhörerstatus ab:

  1. Rufen Sie getSnapshotClient.getHeadphoneState() auf.
  2. Erstellen Sie mit addOnSuccessListener ein OnSuccessListener-Element, das ein HeadphoneStateResponse erfassen kann.
  3. Rufen Sie getStatus() auf, um zu prüfen, ob das Ergebnis gültig ist.
  4. Bei Erfolg rufen Sie 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-Längengrad) mit einem Aufruf von getLocation() abrufen, der ein LocationResponse-Element zurückgibt. Sie können dann LocationResponse.getLocation() aufrufen, um ein Location mit den aktuellen Standortdaten abzurufen.

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 gewährt hat. Im folgenden Beispiel wird geprüft, ob die Berechtigung android.permission.ACCESS_FINE_LOCATION gewährt wurde. Falls nicht, wird der Nutzer um seine 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. Erstellen Sie mit addOnSuccessListener ein OnSuccessListener-Element, das ein LocationResponse erfassen kann.

  4. Rufen Sie getStatus() auf, um zu prüfen, ob das Ergebnis gültig ist.

  5. Rufen Sie LocationResponse.getLocation() auf, um den aktuellen Location zurückzugeben.

Das folgende Beispiel zeigt, wie Sie den aktuellen Standort abrufen:

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