Pobieranie danych zrzutu

W tej sekcji dowiesz się, jak za pomocą Snapshot API uzyskać bieżący stan każdego z obsługiwanych typów kontekstu. Więcej informacji znajdziesz w artykule Pierwsze kroki. Szczegółowe informacje o wycofanych sygnałach kontekstowych znajdziesz w tym rozwijanym powiadomieniu:

Pobieranie bieżącej aktywności

Aby uzyskać informacje o bieżącej aktywności użytkownika, wywołaj funkcję getDetectedActivity(), która zwraca obiekt ActivityRecognitionResult zawierający informacje o ostatnich aktywnościach użytkownika.

Metoda getDetectedActivity() wymaga uprawnienia com.google.android.gms.permission.ACTIVITY_RECOGNITION. Dodaj to uprawnienie do AndroidManifest.xml.

Aby uzyskać informacje o bieżącej aktywności użytkownika, wykonaj te czynności:

  1. Wywołaj getSnapshotClient(), aby utworzyć instancję SnapshotClient.
  2. Użyj kodu addOnSuccessListener, aby utworzyć OnSuccessListener, który może nasłuchiwać DetectedActivityResponse.
  3. Zadzwoń pod numer getStatus(), aby upewnić się, że wynik jest prawidłowy.
  4. Zadzwoń pod numer DetectedActivityResponse.getActivityRecognitionResult(), aby zwrócić ActivityRecognitionResult. Możesz użyć tego parametru, aby uzyskać wiele informacji o bieżącej aktywności użytkownika. Przykład:

W tym przykładzie kodu użyto getMostProbableActivity() do uzyskania najbardziej prawdopodobnej wykrytej aktywności i zapisania wyniku w konsoli:

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

Pobieranie informacji o beaconach w pobliżu

Aby uzyskać informacje o beaconach w pobliżu, wywołaj funkcję getBeaconState(). Dane obrazu typu beacon obejmują treść, typ i przestrzeń nazw wszystkich załączników.

Metoda getBeaconState() wymaga uprawnienia android.permission.ACCESS_FINE_LOCATION. Dodaj to uprawnienie do AndroidManifest.xml. Musisz też aktywować interfejs Nearby Messages API w projekcie w Google Developers Console. Więcej informacji znajdziesz w sekcjach Rejestracja i klucze interfejsu API i Pierwsze kroki.

Aby uzyskać informacje o beaconach w pobliżu, wykonaj te czynności:

  1. Sprawdź, czy użytkownik przyznał wymagane uprawnienia. Poniższy przykład sprawdza, czy przyznano uprawnienie android.permission.ACCESS_FINE_LOCATION. Jeśli nie, użytkownik zostanie poproszony o wyrażenie zgody.

    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. Zdefiniuj BeaconState.TypeFilter. Zwraca tylko sygnalizatory z załącznikami zarejestrowanymi w określonej przestrzeni nazw i określonym typie. Możesz też filtrować na podstawie dokładnego dopasowania treści załącznika. Z przykładu poniżej dowiesz się, jak utworzyć filtr typu:

    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. Zadzwoń pod numer getSnapshotClient.getBeaconState().

  4. Użyj kodu addOnSuccessListener, aby utworzyć OnSuccessListener, który może nasłuchiwać BeaconStateResponse.

  5. Zadzwoń pod numer getStatus(), aby upewnić się, że wynik jest prawidłowy.

  6. Wywołaj BeaconStateResponse.getBeaconState(), aby zwrócić stan beacona.

  7. Zadzwoń pod numer BeaconState.getBeaconInfo(), aby otrzymać BeaconState.BeaconInfo.

Poniższy przykład pokazuje, jak uzyskać informacje o beaconie:

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

Pobieranie stanu słuchawek

Aby wykryć, czy słuchawki są podłączone do urządzenia, wywołaj funkcję getHeadphoneState(), która tworzy stan wykrywania HeadphoneStateResponse z ustawieniem OnSuccessListener na wykrywanie. Następnie możesz zadzwonić pod numer getHeadphoneState(), aby uzyskać HeadphoneState.

Aby sprawdzić aktualny stan słuchawek, wykonaj te czynności:

  1. Zadzwoń pod numer getSnapshotClient.getHeadphoneState().
  2. Użyj kodu addOnSuccessListener, aby utworzyć OnSuccessListener, który może nasłuchiwać HeadphoneStateResponse.
  3. Zadzwoń pod numer getStatus(), aby upewnić się, że wynik jest prawidłowy.
  4. W przypadku powodzenia wywołaj funkcję HeadphoneStateResponse.getHeadphoneState(), aby zwrócić stan słuchawek. Wartość to PLUGGED_IN lub UNPLUGGED.

Poniższy przykład kodu pokazuje, jak używać metody 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);
        }
    });

Pobranie lokalizacji

Bieżącą lokalizację użytkownika (szerokość i długość geograficzną) możesz uzyskać, wywołując funkcję getLocation(), która zwraca obiekt LocationResponse. Następnie możesz zadzwonić pod numer LocationResponse.getLocation(), aby uzyskać Location z aktualnymi danymi o lokalizacji.

Metoda getLocation() wymaga uprawnienia android.permission.ACCESS_FINE_LOCATION. Dodaj to uprawnienie do AndroidManifest.xml.

Aby uzyskać aktualną lokalizację, wykonaj te czynności:

  1. Sprawdź, czy użytkownik przyznał wymagane uprawnienia. Poniższy przykład sprawdza, czy przyznano uprawnienie android.permission.ACCESS_FINE_LOCATION. Jeśli nie, użytkownik zostanie poproszony o wyrażenie zgody.

    
    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. Zadzwoń pod numer getSnapshotClient.getLocation().

  3. Użyj kodu addOnSuccessListener, aby utworzyć element OnSuccessListener, który może nasłuchiwać elementu LocationResponse.

  4. Zadzwoń pod numer getStatus(), aby upewnić się, że wynik jest prawidłowy.

  5. Zadzwoń pod numer LocationResponse.getLocation(), aby zwrócić bieżący Location.

Poniższy przykład pokazuje, jak uzyskać bieżącą lokalizację:

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