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

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

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

Чтобы получить текущую активность пользователя, вызовите метод 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 . Вы можете использовать его для получения многих аспектов текущей активности пользователя. Например:

    • Вызовите метод 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 . Кроме того, необходимо активировать API Nearby Messages для вашего проекта в 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 detect с параметром OnSuccessListener установленным в значение detect. Затем вы можете вызвать 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();
        }
    })