Pobieranie danych zrzutu

W tej sekcji dowiesz się, jak za pomocą interfejsu Snapshot API uzyskać bieżący stan każdego obsługiwanego typu kontekstu. Więcej informacji znajdziesz w artykule Pierwsze kroki. Aby dowiedzieć się więcej o wycofanych sygnałach kontekstowych, otwórz to powiadomienie rozwijane:

Pobieranie bieżącej aktywności

Aby poznać bieżącą aktywność użytkownika, wywołaj metodę getDetectedActivity(), która zwraca ActivityRecognitionResult z najnowszymi działaniami użytkownika.

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

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

  1. Wywołaj getSnapshotClient(), aby utworzyć instancję SnapshotClient.
  2. Użyj metody addOnSuccessListener, aby utworzyć element OnSuccessListener, który nasłuchuje na: DetectedActivityResponse.
  3. Wywołaj getStatus(), aby mieć pewność, że wynik jest prawidłowy.
  4. Wywołaj DetectedActivityResponse.getActivityRecognitionResult(), aby zwrócić ActivityRecognitionResult. Dzięki niemu możesz poznać wiele aspektów bieżącej aktywności użytkownika. Przykład:

Ten przykładowy kod korzysta z getMostProbableActivity(), aby określić najbardziej prawdopodobną 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");
        }
    })

Obrazy typu beacon w pobliżu

Aby uzyskać informacje o pobliskich beaconach, zadzwoń pod numer getBeaconState(). Dane obrazu typu beacon obejmują treść, typ i przestrzeń nazw wszelkich załączników.

Metoda getBeaconState() wymaga uprawnienia android.permission.ACCESS_FINE_LOCATION. Dodaj te uprawnienia do użytkownika AndroidManifest.xml. Musisz też włączyć interfejs Nearby Messages API w projekcie Google Developers Console. Więcej informacji znajdziesz w artykułach Rejestracja i klucze interfejsu API oraz Pierwsze kroki.

Aby uzyskać informacje o beaconach w pobliżu:

  1. Sprawdź, czy użytkownik przyznał wymagane uprawnienia. W tym przykładzie sprawdzamy, czy uprawnienie android.permission.ACCESS_FINE_LOCATION zostało przyznane. W przeciwnym razie użytkownik zostanie poproszony o udzielenie 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. Określ BeaconState.TypeFilter. Zwracany jest tylko obraz typu beacon z załącznikami, które są zarejestrowane za pomocą określonej przestrzeni nazw i typu. Możesz też filtrować na podstawie dopasowania bajtów do treści załącznika. Poniższy przykład pokazuje, jak utworzyć filtr typu:

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

  4. Użyj metody addOnSuccessListener, aby utworzyć element OnSuccessListener, który nasłuchuje na: BeaconStateResponse.

  5. Wywołaj getStatus(), aby mieć pewność, że wynik jest prawidłowy.

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

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

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

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

Sprawdź stan słuchawek

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

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

  1. Zadzwoń pod numer getSnapshotClient.getHeadphoneState().
  2. Użyj metody addOnSuccessListener, aby utworzyć element OnSuccessListener, który nasłuchuje na: HeadphoneStateResponse.
  3. Wywołaj getStatus(), aby mieć pewność, że wynik jest prawidłowy.
  4. Jeśli operacja się uda, wywołaj HeadphoneStateResponse.getHeadphoneState(), aby wyświetlić stan słuchawek. Wartością jest PLUGGED_IN lub UNPLUGGED.

Poniższy przykład kodu pokazuje, jak używać narzędzia 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

Możesz poznać bieżącą lokalizację użytkownika (szerokość i szerokość geograficzną) w wywołaniu funkcji getLocation(), która zwraca LocationResponse. Następnie możesz wywołać LocationResponse.getLocation(), aby uzyskać Location z bieżącymi danymi o lokalizacji.

Metoda getLocation() wymaga uprawnienia android.permission.ACCESS_FINE_LOCATION. Dodaj te uprawnienia do domeny AndroidManifest.xml.

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

  1. Sprawdź, czy użytkownik przyznał wymagane uprawnienia. W podanym niżej przykładzie sprawdzamy, czy uprawnienie android.permission.ACCESS_FINE_LOCATION zostało przyznane. W przeciwnym razie użytkownik zostanie poproszony o udzielenie 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 metody addOnSuccessListener, aby utworzyć element OnSuccessListener, który nasłuchuje na: LocationResponse.

  4. Wywołaj getStatus(), aby mieć pewność, że wynik jest prawidłowy.

  5. Wywołaj LocationResponse.getLocation(), aby zwrócić bieżącą wartość 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();
        }
    })