Идентифицировать макрокамеру в смартфоне Android с помощью Kotlin/JavaAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Идентифицировать макрокамеру в смартфоне Android с помощью Kotlin/Java

Сообщение Anonymous »

Я пытаюсь программно проверить, есть ли на Android-смартфоне макрокамера или нет.
Попробовал CameraManager и с помощью него обнаружил различные характеристики камеры. Затем нашли конкретные пороги макрокамеры и расставили условия по характеристикам, чтобы найти наличие макрокамеры в смартфоне Android. Поскольку прямого способа найти макрокамеру не существует.

Код: Выделить всё

val cameraManager =  context?.getSystemService(Context.CAMERA_SERVICE) as? CameraManager

cameraManager?.cameraIdList?.forEach { cameraId ->
val characteristics = cameraManager.getCameraCharacteristics(cameraId)
val lensFacing = characteristics.get(CameraCharacteristics.LENS_FACING)
val capabilities =
characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)
capabilities?.let {
Log.d("macroCameraLog_2", "isMacroCameraSupported: CAMERA_ID $cameraId")
Log.d("macroCameraLog_2", "isMacroCameraSupported: HARD_WARE_LEVEL $it")
if (it >= CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_3) {
Log.d("macroCameraLog_2", "isMacroCameraSupported: TRUE")
}
}

val afModes = characteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES)
afModes?.let { modes ->
Log.d("macroCameraLog_3", "isMacroCameraSupported: CAMERA_ID $cameraId")
Log.d(
"macroCameraLog_3",
"isMacroCameraSupported: MODES ${formatCharacteristicValue(modes)}"
)
if (modes.contains(CameraMetadata.CONTROL_AF_MODE_MACRO)) {
Log.d("macroCameraLog_3", "Macro AF mode is supported")
}

if (modes.contains(CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE)) {
Log.d("macroCameraLog_3", "CONTROL_Macro AF mode is supported")
}
}

if (lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
// Get the minimum focus distance
val minFocusDistance =
characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE)
?: return false
Log.d(
"macroCameraLog",
"isMacroCameraSupported: Min_Focus -> $minFocusDistance"
)
Log.d("macroCameraLog", "isMacroCameraSupported: Camera_ID -> $cameraId")
// Define a threshold for macro capability (e.g., less than or equal to 0.05 meters or 5 cm)
if (minFocusDistance in 0.01..0.05) {
Log.d(
"macroCameraLog",
"isMacroCameraSupported: Min_Focus -> $minFocusDistance"
)
Log.d("macroCameraLog", "isMacroCameraSupported: Camera_ID -> $cameraId")
}
}
// Check if it's a rear camera
if (lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
// Check for physical cameras in a multi-camera system
val physicalCameraIds = characteristics.physicalCameraIds
if (physicalCameraIds.isNotEmpty()) {
for (physicalCameraId in physicalCameraIds) {
val physicalCharacteristics =
cameraManager.getCameraCharacteristics(physicalCameraId)
val physicalFocalLengths =
physicalCharacteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS)

val minFocusDistance =
physicalCharacteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE)
?: return false

// Define a threshold for macro capability (e.g., less than or equal to 0.05 meters or 5 cm)
Log.d(
"macroCameraLog",
"Physical_isMacroCameraSupported: Camera_ID -> $cameraId"
)
Log.d(
"macroCameraLog",
"Physical_isMacroCameraSupported: Min_Focus -> $minFocusDistance"
)
if (minFocusDistance in 0.01..0.05) {
Log.d(
"macroCameraLog",
"Physical_isMacroCameraSupported: Min_Focus ->  $minFocusDistance"
)
Log.d(
"macroCameraLog",
"Physical_isMacroCameraSupported: Camera_ID -> $cameraId"
)
}

physicalFocalLengths?.let { focalLengths ->
for (focalLength in focalLengths) {
// Check for macro lens characteristics
if (focalLength in 1.0..2.0) {
// Macro lens found in a multi-camera system
// return true
}
}
}
}
}
}
}
Единственное возможное решение, которое я придумал, — это проверка различных свойств макрокамеры в соответствии с конкретными пороговыми значениями, такими как фокусное расстояние, уровень оборудования, минимальное расстояние фокусировки и режим автофокусировки. Но я не нашел надежного решения, позволяющего проверить, есть ли на устройстве макрокамера или нет.

Подробнее здесь: https://stackoverflow.com/questions/791 ... otlin-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Идентифицировать макрокамеру в смартфоне Android с помощью Kotlin/Java
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Идентифицировать макрокамеру в смартфоне Android с помощью Kotlin/Java
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Идентифицировать макрокамеру в смартфоне Android с помощью Kotlin/Java
    Anonymous » » в форуме Android
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Ищем простое приложение для Android для тренировки жестов на смартфоне [закрыто]
    Anonymous » » в форуме Android
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Развертывание PWA на смартфоне без использования браузера
    Гость » » в форуме IOS
    0 Ответы
    15 Просмотры
    Последнее сообщение Гость

Вернуться в «Android»