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 ActivityRecognitionResult
z 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:
- Wywołaj funkcję
getSnapshotClient()
, aby utworzyć instancję funkcjiSnapshotClient
. - Użyj
addOnSuccessListener
, aby utworzyćOnSuccessListener
, który może nasłuchiwaćDetectedActivityResponse
. - Zadzwoń pod numer
getStatus()
, aby mieć pewność, że wynik jest prawidłowy. 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:- Wywołaj funkcję
getMostProbableActivity()
, aby uzyskać tylko najbardziej prawdopodobną aktywność. - Wywołaj
getProbableActivities()
, aby uzyskać listę ostatnich działań uporządkowanych według prawdopodobieństwa. - Wywołaj funkcję
getActivityConfidence()
, aby zwrócić wartość ufności dla danego typu aktywności. - Wywołaj funkcję
hasResult()
, aby sprawdzić, czy elementIntent
zawiera elementActivityRecognitionResult
.
- Wywołaj funkcję
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:
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; }
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"));
Zadzwoń pod numer
getSnapshotClient.getBeaconState()
.Użyj
addOnSuccessListener
, aby utworzyćOnSuccessListener
, który może nasłuchiwaćBeaconStateResponse
.Zadzwoń pod numer
getStatus()
, aby mieć pewność, że wynik jest prawidłowy.Wywołaj funkcję
BeaconStateResponse.getBeaconState()
, aby pobrać stan sygnalizatora.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 HeadphoneStateResponse
z ustawieniem OnSuccessListener
.
Następnie możesz zadzwonić pod numer getHeadphoneState()
, aby uzyskać HeadphoneState
.
Aby uzyskać bieżący stan słuchawek, wykonaj te czynności:
- Zadzwoń pod numer
getSnapshotClient.getHeadphoneState()
. - Użyj
addOnSuccessListener
, aby utworzyćOnSuccessListener
, który może nasłuchiwaćHeadphoneStateResponse
. - Zadzwoń pod numer
getStatus()
, aby mieć pewność, że wynik jest prawidłowy. - W przypadku powodzenia wywołaj funkcję
HeadphoneStateResponse.getHeadphoneState()
, aby przywrócić stan słuchawek. Ta wartość może byćPLUGGED_IN
lubUNPLUGGED
.
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:
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; }
Zadzwoń pod numer
getSnapshotClient.getLocation()
.Użyj
addOnSuccessListener
, aby utworzyćOnSuccessListener
, który może nasłuchiwaćLocationResponse
.Zadzwoń pod numer
getStatus()
, aby mieć pewność, że wynik jest prawidłowy.Zadzwoń pod numer
LocationResponse.getLocation()
, aby wrócić do bieżącegoLocation
.
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();
}
})