В этом разделе показано, как использовать Snapshot API для получения текущего состояния для каждого из поддерживаемых типов контекста. Дополнительные сведения см. в разделе Начало работы . Для получения подробной информации об устаревших контекстных сигналах откройте следующее расширяемое уведомление:
Получить текущую активность
Чтобы получить текущую активность пользователя, вызовите метод getDetectedActivity()
, который возвращает ActivityRecognitionResult
, содержащий информацию о самых последних действиях пользователя.
Метод getDetectedActivity()
требует разрешения com.google.android.gms.permission.ACTIVITY_RECOGNITION
. Добавьте это разрешение в AndroidManifest.xml
.
Чтобы получить текущую активность пользователя, выполните следующие действия:
- Вызовите
getSnapshotClient()
, чтобы создать экземплярSnapshotClient
. - Используйте
addOnSuccessListener
для созданияOnSuccessListener
, который может прослушиватьDetectedActivityResponse
. - Вызовите
getStatus()
, чтобы убедиться, что результат действителен. Вызовите
DetectedActivityResponse.getActivityRecognitionResult()
, чтобы вернутьActivityRecognitionResult
. Вы можете использовать это, чтобы получить многие аспекты текущей активности пользователя. Например:- Вызовите
getMostProbableActivity()
, чтобы получить только наиболее вероятную активность. - Вызовите
getProbableActivities()
, чтобы получить список недавних действий, ранжированных по вероятности. - Вызовите
getActivityConfidence()
, чтобы вернуть значение достоверности для данного типа активности. - Вызовите
hasResult()
, чтобы определить, содержит лиIntent
ActivityRecognitionResult
.
- Вызовите
В следующем примере кода getMostProbableActivity()
используется для получения наиболее вероятной обнаруженной активности и записи результата в консоль:
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");
}
})
Получить близлежащие маяки
Чтобы получить информацию о ближайших маяках , вызовите getBeaconState()
. Данные маяка состоят из содержимого, типа и пространства имен любых вложений.
Для метода getBeaconState()
требуется разрешение android.permission.ACCESS_FINE_LOCATION
. Добавьте это разрешение в AndroidManifest.xml
. Кроме того, вы должны активировать Nearby Messages API для своего проекта Google Developers Console. Дополнительные сведения см. в разделах «Регистрация и ключи API» и «Начало работы» .
Чтобы получить информацию о ближайших маяках, выполните следующие действия:
Проверьте, предоставил ли пользователь необходимые разрешения. В следующем примере проверяется, предоставлено ли разрешение
android.permission.ACCESS_FINE_LOCATION
. Если нет, пользователю предлагается дать согласие.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; }
Определите
BeaconState.TypeFilter
. Это возвращает только маяки с вложениями, которые зарегистрированы с указанным пространством имен и типом. Вы также можете фильтровать на основе побайтового соответствия содержимого вложения. В следующем примере показано, как создать фильтр типа: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")); Вызовите
getSnapshotClient.getBeaconState()
.Используйте
addOnSuccessListener
для созданияOnSuccessListener
, который может прослушиватьBeaconStateResponse
.Вызовите
getStatus()
, чтобы убедиться, что результат действителен.Вызовите
BeaconStateResponse.getBeaconState()
, чтобы вернуть состояние маяка.Вызовите
BeaconState.getBeaconInfo()
, чтобы получитьBeaconState.BeaconInfo
.
В следующем примере показано, как получить информацию о маяке:
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();
}
})
Получить состояние наушников
Чтобы определить, подключены ли наушники к устройству, вызовите getHeadphoneState()
, который создает состояние обнаружения HeadphoneStateResponse
с включенным OnSuccessListener
для обнаружения. Затем вы можете вызвать getHeadphoneState()
, чтобы получить HeadphoneState
.
Чтобы получить текущее состояние наушников, выполните следующие действия:
- Вызовите
getSnapshotClient.getHeadphoneState()
. - Используйте
addOnSuccessListener
для созданияOnSuccessListener
, который может прослушиватьHeadphoneStateResponse
. - Вызовите
getStatus()
, чтобы убедиться, что результат действителен. - В случае успеха вызовите
HeadphoneStateResponse.getHeadphoneState()
, чтобы вернуть состояние наушников. Это значение либоPLUGGED_IN
, либоUNPLUGGED
.
В следующем примере кода показано, как использовать 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);
}
});
Получить местоположение
Вы можете получить текущее местоположение пользователя (широта-долгота) с помощью вызова getLocation()
, который возвращает LocationResponse
. Затем вы можете вызвать LocationResponse.getLocation()
, чтобы получить Location
с текущими данными о местоположении.
Метод getLocation()
требует разрешения android.permission.ACCESS_FINE_LOCATION
. Добавьте это разрешение в AndroidManifest.xml
.
Чтобы получить текущее местоположение, выполните следующие действия:
Проверьте, предоставил ли пользователь необходимые разрешения. В следующем примере проверяется, предоставлено ли разрешение
android.permission.ACCESS_FINE_LOCATION
. Если нет, пользователю предлагается дать согласие.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; }
Вызовите
getSnapshotClient.getLocation()
.Используйте
addOnSuccessListener
для созданияOnSuccessListener
, который может прослушиватьLocationResponse
.Вызовите
getStatus()
, чтобы убедиться, что результат действителен.Вызовите
LocationResponse.getLocation()
, чтобы вернуть текущееLocation
.
В следующем примере показано, как получить текущее местоположение:
Awareness.getSnapshotClient(this).getLocation()
.addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
@Override
public void onSuccess(LocationResponse locationResponse) {
Location loc = locationResponse.getLocationResult();
}
})