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 tym rozwijanym powiadomieniu:

Pobieranie bieżącej aktywności

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

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

Aby uzyskać bieżącą aktywność użytkownika:

  1. Wywołaj getSnapshotClient() , aby utworzyć instancję SnapshotClient.
  2. Użyj addOnSuccessListener , aby utworzyć OnSuccessListener, który może nasłuchiwać DetectedActivityResponse.
  3. Wywołaj 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:

Ten przykładowy kod używa 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 beacons, call getBeaconState(). Dane beacona składają się z treści, typu i przestrzeni 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 artykułach Rejestracja i klucze API oraz Pierwsze kroki.

Aby uzyskać informacje o beaconach w pobliżu:

  1. Sprawdź, czy użytkownik przyznał wymagane uprawnienia. Ten 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 on tylko beacony z załącznikami zarejestrowanymi w określonej przestrzeni nazw i typie. Możesz też filtrować na podstawie dokładnego dopasowania treści załącznika. Ten przykład pokazuje, 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. Wywołaj getSnapshotClient.getBeaconState().

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

  5. Wywołaj getStatus() , aby sprawdzić, czy wynik jest prawidłowy.

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

  7. Wywołaj BeaconState.getBeaconInfo() , aby uzyskać BeaconState.BeaconInfo.

Ten 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 sprawdzić, czy słuchawki są podłączone do urządzenia, wywołaj getHeadphoneState(), która tworzy HeadphoneStateResponse z ustawionym OnSuccessListener. Następnie możesz wywołać getHeadphoneState(), aby uzyskać HeadphoneState.

Aby uzyskać bieżący stan słuchawek:

  1. Wywołaj getSnapshotClient.getHeadphoneState().
  2. Użyj addOnSuccessListener , aby utworzyć OnSuccessListener, który może nasłuchiwać HeadphoneStateResponse.
  3. Wywołaj getStatus() , aby sprawdzić, czy wynik jest prawidłowy.
  4. Jeśli operacja się powiedzie, wywołaj HeadphoneStateResponse.getHeadphoneState() , aby zwrócić stan słuchawek. Ta wartość to PLUGGED_IN lub UNPLUGGED.

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

Pobieranie lokalizacji

Bieżącą lokalizację użytkownika (szerokość i długość geograficzną) możesz uzyskać, wywołując getLocation(), która zwraca LocationResponse. Następnie możesz wywołać 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ć bieżącą lokalizację:

  1. Sprawdź, czy użytkownik przyznał wymagane uprawnienia. Ten 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. Wywołaj getSnapshotClient.getLocation().

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

  4. Wywołaj getStatus() , aby sprawdzić, czy wynik jest prawidłowy.

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