ym88659208ym87991671
Работа с камерой | Документация для разработчиков

Работа с камерой

Обновлено 9 февраля 2023

Вы можете настроить в Native App взаимодействие с камерой.

Получение доступа к камере

Для получения изображения с камеры устройства вы можете использовать встроенные механизмы Android. Для этого изучите документацию Android Camera2 API.

При использовании камеры через этот протокол необходимо:

  • запрашивать у пользователя разрешение на получение доступа;
  • обрабатывать callback с ошибками. Например, на устройстве SberPortal есть крышка, которая закрывает доступ к камере. Если в этот момент смартап попытается использовать камеру устройства, то появится ошибка, которую необходимо правильно обработать.

Распознавание жестов и позы

Чтобы распознавать позы и жесты со встроенных на устройствах камер, добавьте SDK в app/build.gradle:

dependencies {
implementation "ru.sberdevices.smartapp.sdk:cv:1.0"
}

Библиотека распознает:

  • жесты (например, пользователь показывает ладонь, и устройство понимает, что это знак «Пауза»);
  • лицо и тело, и их размещение в прямоугольной рамке;
  • позы (ключевые точки лица и тела);
  • фон (для отделения фона от фигуры человека).

Настройка навигационных жестов

Умные устройства с видеокамерой автоматически распознают навигационные жесты пользователя — движения рукой вверх, вниз, вправо и влево соответствуют аналогичным свайпам на экране устройства. Функциональность доступна на устройствах версии StarOS 1.80 и выше.

Чтобы изменить или отключить реакцию смартапа на жесты, переопределите метод dispatchTouchEvent в Activity смартапа. Теперь если устройство зафиксирует навигационный жест, то поле deviceId параметра MotionEvent примет значение 999 (SWIPE_GESTURE_DEVICE_ID).

Чтобы определить тип навигационного жеста, создайте класс GestureDetectorCompat и передайте в него OnSwipeListener в качестве обработчика жестов. Параметр direction будет содержать информацию о типе жеста. Далее вы можете изменить реакцию на жесты навигации в соответствии с логикой смартапа.

Чтобы смартап не реагировал на навигационный жест, обозначьте, что жест обработан. Для этого верните true в методе dispatchTouchEvent.


Пример обработки жестов в Activity смартапа:

import ru.sberdevices.utils.OnSwipeListener
import ru.sberdevices.utils.SWIPE_GESTURE_DEVICE_ID

const val IS_GESTURE_NAVIGATION_ENABLED = true

class MainActivity : Activity() {

private val gestureDetector by lazy { // lazy, так как контекст еще не создан
GestureDetectorCompat(this as Context, OnSwipeListener { direction ->
Toast.makeText(this, "$direction", Toast.LENGTH_SHORT).show() // здесь должна быть ваша логика
true // сообщаем системе, что мы обработали событие
})
}

override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
if (ev.deviceId == SWIPE_GESTURE_DEVICE_ID) { // определяем, сгенерировано ли событие
return if (!IS_GESTURE_NAVIGATION_ENABLED) {
true // обработка сгенерированных жестов выключена, сообщаем системе, что событие уже обработано
} else {
gestureDetector.onTouchEvent(ev) // передаем событие в gestureDetector
}
}

return super.dispatchTouchEvent(ev) // событие обычное, можно его не обрабатывать и передать обратно системе
}
}
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.