Pobieranie danych zrzutu

W tej sekcji dowiesz się, jak używać interfejsu Snapshot API, aby 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 rozwijanym powiadomieniu poniżej:

Pobieranie bieżącej aktywności

Aby uzyskać informacje o bieżącej aktywności użytkownika, wywołaj metodę getDetectedActivity(), która zwraca obiekt ActivityRecognitionResult zawierający informacje o ostatnich działaniach 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 addOnSuccessListener, aby utworzyć OnSuccessListener, który może nasłuchiwać DetectedActivityResponse.
  3. Zadzwoń pod numer getStatus(), aby sprawdzić, czy wynik jest prawidłowy.
  4. Wywołaj DetectedActivityResponse.getActivityRecognitionResult(), aby zwrócić ActivityRecognitionResult. Możesz go użyć, aby uzyskać wiele informacji o bieżącej aktywności użytkownika. Przykład:

W tym przykładowym kodzie użyto metody getMostProbableActivity(), aby uzyskać najbardziej prawdopodobną wykrytą aktywność i zarejestrować 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 informacji o beakonach w pobliżu

Aby uzyskać informacje o beaconach w pobliżu, wywołaj 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 artykule Rejestracja i klucze interfejsu API oraz w przewodniku dla początkujących.

Aby uzyskać informacje o pobliskich beaconach, wykonaj te czynności:

  1. Sprawdź, czy użytkownik przyznał wymagane uprawnienia. W tym przykładzie sprawdzamy, 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. Zwracane są tylko nadajniki z załącznikami zarejestrowanymi w określonej przestrzeni nazw i określonego typu. Możesz też filtrować na podstawie dopasowania bajt po bajcie w 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 addOnSuccessListener, aby utworzyć OnSuccessListener, który może nasłuchiwać BeaconStateResponse.

  5. Zadzwoń pod numer getStatus(), aby sprawdzić, czy wynik jest prawidłowy.

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

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

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

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

Sprawdzanie stanu słuchawek

Aby wykryć, czy słuchawki są podłączone do urządzenia, wywołaj getHeadphoneState(), co spowoduje utworzenie stanu wykrywania HeadphoneStateResponse z OnSuccessListener ustawionym na wykrywanie. Następnie możesz wywołać metodę getHeadphoneState(), aby uzyskać HeadphoneState.

Aby sprawdzić 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 sprawdzić, czy wynik jest prawidłowy.
  4. W przypadku powodzenia wywołaj HeadphoneStateResponse.getHeadphoneState(), aby zwrócić stan słuchawek. Ta wartość to PLUGGED_IN lub UNPLUGGED.

Poniższy przykładowy kod pokazuje, jak używać 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 wywołać metodę LocationResponse.getLocation(), aby uzyskać obiekt Location z danymi o bieżącej 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 przyznał wymagane uprawnienia. W tym przykładzie sprawdzamy, 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 addOnSuccessListener, aby utworzyć OnSuccessListener, który może nasłuchiwać LocationResponse.

  4. Zadzwoń pod numer getStatus(), aby sprawdzić, czy wynik jest prawidłowy.

  5. Wywołaj LocationResponse.getLocation(), aby zwrócić bieżący Location.

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