#android #kotlin #android-camerax
#Android #kotlin #android-camerax
Вопрос:
Я пытаюсь реализовать пользовательское приложение для камеры с помощью CameraX. Учитывая, что многие новые устройства теперь имеют несколько задних камер, я также хочу включить это. Таким образом, пользователь может выбрать, какую камеру использовать. Я попробовал следующее, используя опцию addCameraFilter:
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(when (camera.cameraSettings?.lensFacing?.let {
LensFacing.valueOf(it)
}) {
LensFacing.Back -> CameraSelector.LENS_FACING_BACK
else -> CameraSelector.LENS_FACING_FRONT
})
.addCameraFilter { cameraList ->
val cameraChosen = camera.cameraSettings?.camera
cameraChosen?.let {
if (cameraChosen < cameraList.size) {
val setCamera = cameraList[cameraChosen]
cameraList.clear()
cameraList.add(setCamera)
}
}
cameraList
}
.build()
Однако в режиме отладки значение cameraList всегда равно 1. Даже на устройствах с несколькими задними камерами. Означает ли это, что CameraX автоматически выбрал «правильную» камеру? Как я могу вручную выбрать другую (например, на некоторых телефонах установлена камера с широким объективом)?
Спасибо!
Комментарии:
1. Если на используемом устройстве установлено несколько камер заднего вида, но в фильтре камеры указана только 1, вы можете столкнуться с чем-то подобным , когда на устройстве есть физические камеры, которые не указаны / не возвращены в списке общедоступных камер (
getCameraIdList()
), но являются частью логической камеры и возвращаютсявместо этого в getPhysicalCameraIds() .2. Я тестировал его на Samsung A70, который имеет 3 задние камеры. getCameraIdList() показывает мне 2 камеры (одна из которых является фронтальной камерой) и getPhysicalCameraIds() = 0
3. Я также проверил предоставленную вами ссылку и попытался реализовать CameraFilter, но он ничего не возвращает. Просто ссылка -lambda, которая не работает :/
4. Результат, который вы видите на a70, ожидаемый, если
getCameraIdList()
возвращает 1 заднюю камеру, то и CameraX тоже. По ссылке, которую я предоставил в предыдущем комментарии, последний ответ предоставляет косвенный способ получить конкретную физическую камеру, установив коэффициент масштабирования. Например, установка коэффициента масштабирования меньше 1 даст вам доступ к камере с широкоугольным объективом. Это не идеально, но другим вариантом может быть прямое использование camera2.