Pobieranie danych zrzutu

W tej sekcji dowiesz się, jak używać interfejsu Snapshot API do uzyskiwania bieżącego stanu każdego z obsługiwanych typów kontekstu. Więcej informacji znajdziesz w artykule Pierwsze kroki. Szczegółowe informacje o nieużywanych już sygnałach kontekstowych znajdziesz w poniższym powiadomieniu:

Pobieranie bieżącej aktywności

Aby uzyskać informacje o obecnej aktywności użytkownika, wywołaj funkcję getDetectedActivity(), która zwraca obiekt ActivityRecognitionResultz danymi o ostatnich działaniach użytkownika.

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

Aby poznać bieżącą aktywność użytkownika, wykonaj te czynności:

  1. Wywołaj funkcję getSnapshotClient(), aby utworzyć instancję funkcji SnapshotClient.
  2. Użyj addOnSuccessListener, aby utworzyć OnSuccessListener, który może nasłuchiwać DetectedActivityResponse.
  3. Zadzwoń pod numer getStatus(), aby mieć pewność, że wynik jest prawidłowy.
  4. Zadzwoń pod numer DetectedActivityResponse.getActivityRecognitionResult(), aby zwrócić ActivityRecognitionResult. Dzięki temu możesz uzyskać wiele informacji o obecnej aktywności użytkownika. Przykład:

W tym przykładzie kodu użyto funkcji getMostProbableActivity(), aby uzyskać najbardziej prawdopodobną wykrytą aktywność i zapisać wynik 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 danych z bliskich beaconów

Aby uzyskać informacje o blisko znajdujących się beaconach, zadzwoń pod numer getBeaconState(). Dane beacona obejmują zawartość, 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 Konsoli programistów Google. Więcej informacji znajdziesz w artykule Rejestracja i klucze API oraz Pierwsze kroki.

Aby uzyskać informacje o bliskich beaconach:

  1. Sprawdź, czy użytkownik ma wymagane uprawnienia. Ten przykład sprawdza, czy przyznano uprawnienie android.permission.ACCESS_FINE_LOCATION. W przeciwnym razie 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 beacony z załącznikami zarejestrowanymi w określonej przestrzeni nazw i z określonym typem. Możesz też filtrować według dopasowania bajt po bajcie treści załączonego pliku. Z poniższego przykładu 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 addOnSuccessListener, aby utworzyć OnSuccessListener, który może nasłuchiwać BeaconStateResponse.

  5. Zadzwoń pod numer getStatus(), aby mieć pewność, że wynik jest prawidłowy.

  6. Wywołaj funkcję BeaconStateResponse.getBeaconState(), aby pobrać stan sygnalizatora.

  7. Zadzwoń pod numer BeaconState.getBeaconInfo(), aby uzyskać 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 HeadphoneStateResponsez ustawieniem OnSuccessListener. Następnie możesz zadzwonić pod numer getHeadphoneState(), aby uzyskać HeadphoneState.

Aby uzyskać bieżący stan słuchawek, wykonaj te czynności:

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

Poniższy przykład kodu pokazuje, jak używać funkcji 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 wartość LocationResponse. Następnie możesz zadzwonić pod numer LocationResponse.getLocation(), aby uzyskać Location z bieżącymi danymi o lokalizacji.

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

Aby uzyskać bieżącą lokalizację, wykonaj te czynności:

  1. Sprawdź, czy użytkownik ma wymagane uprawnienia. Ten przykład sprawdza, czy przyznano uprawnienie android.permission.ACCESS_FINE_LOCATION. W przeciwnym razie 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 addOnSuccessListener, aby utworzyć OnSuccessListener, który może nasłuchiwać LocationResponse.

  4. Zadzwoń pod numer getStatus(), aby mieć pewność, że wynik jest prawidłowy.

  5. Zadzwoń pod numer LocationResponse.getLocation(), aby wrócić do bieżącego 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();
        }
    })