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

В этом разделе рассказывается, как использовать Snapshot API, чтобы получать текущее состояние для каждого из поддерживаемых типов контекста. Дополнительную информацию можно найти в статье Начало работы. Чтобы узнать больше об устаревших контекстных сигналах, откройте следующее раскрывающееся уведомление:

Как получить текущую активность

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

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

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

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

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

  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();
        }
    })