В этом разделе показано, как использовать API Snapshot для получения текущего состояния для каждого из поддерживаемых типов контекста. Дополнительную информацию см. в разделе «Начало работы» . Подробную информацию об устаревших контекстных сигналах см. в следующем раскрывающемся уведомлении:
Получить текущую активность
Чтобы получить текущую активность пользователя, вызовите метод 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(), чтобы определить, содержит лиIntentActivityRecognitionResult.
- Вызовите метод
В следующем примере кода используется 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 . Кроме того, необходимо активировать API Nearby Messages для вашего проекта в 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<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"));Вызовите метод
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 detect с параметром OnSuccessListener установленным в значение detect. Затем вы можете вызвать 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();
}
})