Получить данные снимка

В этом разделе рассказывается, как использовать Snapshot API, чтобы получать текущее состояние для каждого из поддерживаемых типов контекста. Подробнее о том, как начать работу… Чтобы узнать больше об упраздненных контекстных сигналах, разверните уведомление ниже.

Как получить данные о текущем действии

Чтобы получить информацию о текущих действиях пользователя, вызовите метод getDetectedActivity(), который возвращает объект ActivityRecognitionResult с информацией о последних действиях пользователя.

Для метода getDetectedActivity() требуется разрешение com.google.android.gms.permission.ACTIVITY_RECOGNITION. Добавьте это разрешение в файл AndroidManifest.xml.

Чтобы получить текущую активность пользователя, выполните следующие действия:

  1. Вызовите getSnapshotClient(), чтобы создать экземпляр SnapshotClient.
  2. Используйте addOnSuccessListener, чтобы создать OnSuccessListener, который может прослушивать DetectedActivityResponse.
  3. Чтобы уточнить, принимается ли ваш полис, позвоните по номеру getStatus().
  4. Вызовите метод DetectedActivityResponse.getActivityRecognitionResult(), чтобы получить объект ActivityRecognitionResult. С помощью этого API можно получать информацию о текущих действиях пользователя. Пример:

    • Вызовите 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 и Начало работы.

Чтобы получить информацию о ближайших маячках, выполните следующие действия:

  1. Проверьте, предоставил ли пользователь необходимые разрешения. В примере ниже проверяется, предоставлено ли разрешение 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;
        }
    
  2. Определите свойство 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"));
    
  3. Позвоните по номеру getSnapshotClient.getBeaconState().

  4. Используйте addOnSuccessListener, чтобы создать OnSuccessListener, который может прослушивать BeaconStateResponse.

  5. Чтобы уточнить, принимается ли ваш полис, позвоните по номеру getStatus().

  6. Вызовите метод BeaconStateResponse.getBeaconState(), чтобы вернуть состояние маяка.

  7. Позвоните по номеру 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.

Чтобы получить текущее состояние наушников, выполните следующие действия:

  1. Позвоните по номеру getSnapshotClient.getHeadphoneState().
  2. Используйте addOnSuccessListener, чтобы создать OnSuccessListener, который может прослушивать HeadphoneStateResponse.
  3. Чтобы уточнить, принимается ли ваш полис, позвоните по номеру getStatus().
  4. В случае успеха вызовите 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.

Чтобы получить текущее местоположение, выполните следующие действия:

  1. Проверьте, предоставил ли пользователь необходимые разрешения. В примере ниже показано, как проверить, предоставлено ли разрешение 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;
        }
    
  2. Позвоните по номеру getSnapshotClient.getLocation().

  3. Используйте addOnSuccessListener, чтобы создать OnSuccessListener, который может прослушивать LocationResponse.

  4. Чтобы уточнить, принимается ли ваш полис, позвоните по номеру getStatus().

  5. Позвоните по номеру LocationResponse.getLocation(), чтобы вернуть текущий Location.

В примере ниже показано, как получить текущее местоположение.

Awareness.getSnapshotClient(this).getLocation()
    .addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
        @Override
        public void onSuccess(LocationResponse locationResponse) {
            Location loc = locationResponse.getLocationResult();
        }
    })