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:
- Wywołaj
getSnapshotClient(), aby utworzyć instancjęSnapshotClient. - Użyj
addOnSuccessListener, aby utworzyćOnSuccessListener, który może nasłuchiwaćDetectedActivityResponse. - Wywołaj
getStatus(), aby sprawdzić, czy wynik jest prawidłowy. 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:- Wywołaj
getMostProbableActivity(), aby uzyskać tylko najbardziej prawdopodobną aktywność. - Wywołaj
getProbableActivities(), aby uzyskać listę ostatnich aktywności uporządkowanych według prawdopodobieństwa. - Wywołaj
getActivityConfidence(), aby zwrócić poziom ufności dla danego typu aktywności. - Wywołaj
hasResult(), aby sprawdzić, czyIntentzawieraActivityRecognitionResult.
- Wywołaj
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:
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; }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"));Wywołaj
getSnapshotClient.getBeaconState().Użyj
addOnSuccessListener, aby utworzyćOnSuccessListener, który może nasłuchiwaćBeaconStateResponse.Wywołaj
getStatus(), aby sprawdzić, czy wynik jest prawidłowy.Wywołaj
BeaconStateResponse.getBeaconState(), aby zwrócić stan beacona.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:
- Wywołaj
getSnapshotClient.getHeadphoneState(). - Użyj
addOnSuccessListener, aby utworzyćOnSuccessListener, który może nasłuchiwaćHeadphoneStateResponse. - Wywołaj
getStatus(), aby sprawdzić, czy wynik jest prawidłowy. - Jeśli operacja się powiedzie, wywołaj
HeadphoneStateResponse.getHeadphoneState(), aby zwrócić stan słuchawek. Ta wartość toPLUGGED_INlubUNPLUGGED.
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ę:
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; }Wywołaj
getSnapshotClient.getLocation().Użyj
addOnSuccessListener, aby utworzyćOnSuccessListener, który może nasłuchiwaćLocationResponse.Wywołaj
getStatus(), aby sprawdzić, czy wynik jest prawidłowy.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();
}
})