Существует ли программный способ определения, имеет ли камера оптический зум?

Кажется, есть некоторые устройства Android с оптическими масштабированиями, например.

  • Samsung S4 Zoom (OS 4.2)
  • Altek A14 и A16 (OS 2.3.5)

Есть ли способ обнаружить это программно?

Поскольку для инициализации камера занимает несколько секунд, в моем приложении есть несколько потоков, в которых я запускаю камеру в ожидании, что пользователь собирается ее использовать (так что приложение чувствует себя быстрее, когда на самом деле нажимает мое приложение камера). Если камера имеет оптический зум, то я не хочу этого делать, поскольку объектив скользит и раздражает пользователя.

Если мне нужно занести в черный список эти устройства, кто-нибудь знает список всех устройств Android там с оптическими масштабированиями, желательно с их Build.MANUFACTURER и Build.PRODUCT строки?

В случае, если это помогает, вот Camera.Parameters для S4 Zoom, который я недавно приобрел:

{preferred-preview-size-for-video=704x528, factory-af-led-lv-limit=-1,-1, zoom=0, factory-af-scan-limit=-1,-1, max-num-detected-faces-hw=0, continuous-mode=off, zoom-supported=true, metering=center, whitebalance=auto, scene-mode=auto, jpeg-quality=1, factory-testno=0, factory-af-diff-check=-1,-1, preview-format-values=yuv420sp,yuv420p, best-mode=off, red-eye-fix=fail, jpeg-thumbnail-quality=100, preview-format=yuv420sp, low-light-mode=off, zoom-action=zoom-stop, face-detection=off, video-size-values=1920x1080,1280x720,800x450,768x512,640x480,320x240,176x144, factory-zoom-slope-check-data=-1,-1, preview-size=960x540, focal-length=4.300000, flash-charging=0, factory-cap-range=-1,-1, factory-iris-range=-1,-1, flash-mode-values=off,auto,red-eye,on,fillin,slow,red-eye-fix, preview-frame-rate-values=30,15, factory-af-scan-range=-1,-1, max-num-metering-areas=0, preview-frame-rate=30, focus-mode-values=auto,infinity,macro,fixed,face-detection,continuous,continuous-picture,continuous-video,manual,multi,touch,object-tracking, jpeg-thumbnail-width=224, video-size=0x0, scene-mode-values=auto,portrait,landscape,night,beach,snow,sunset,fireworks,sports,party,candlelight,dusk-dawn,fall-color,back-light,text, preview-fps-range-values=(7000,30000), jpeg-thumbnail-size-values=224x126,160x120,192x128,0x0, zoom-ratios=100,120,140,160,180,220,310,420,560,790,1000, preview-size-values=960x540,768x512,704x576,704x528,640x524,640x480,320x240, smart-scene-detection=0, factory-zoom-range-check-data=-1,-1, factory-af-led-range=-1,-1,-1,-1, picture-size-values=4608x2592,3264x2448,4608x3456,4608x3072,4096x2304,3960x2640,3648x2736,2592x1944,2304x1728,1984x1488,1920x1080,1024x768,960x720,640x480, preview-fps-range=7000,30000, auto-whitebalance-lock=false, min-exposure-compensation=-6, antibanding=off, max-num-focus-areas=1, vertical-view-angle=46.3, factory-wb-value=-1,-1,-1,-1, zoom-ring=-1, horizontal-view-angle=67, video-stabilization-supported=false, jpeg-thumbnail-height=126, continuous-fps=, focus-mode=auto, factory-sc-speedtime=-1,-1, factory-gyro-range-data=-1,-1,-1,-1, auto-whitebalance-lock-supported=true, video-frame-format=yuv420sp, max-num-detected-faces-sw=0, picture-format-values=jpeg, wb-k=-1, max-exposure-compensation=6, factory-ois-range-data=-1,-1,-1,-1,-1,-1,-1, focus-areas=(0,0,0,0,0), exposure-compensation=0, exposure-compensation-step=0.33, flash-mode=off, flash-standby=off, auto-exposure-lock=false, wb-custom=-1,-1, effect-values=none,mono,negative,sepia,antique,point-blue,point-red,point-yellow,warm,cold, factory-punt-range-data=-1,-1,-1, factory-vib-range-data=-1,-1,-1,-1,-1,-1, picture-size=4608x2592, max-zoom=10, factory-gain-liveview-range=-1,-1, effect=none, blink=fail, whitebalance-values=auto,fluorescent-h,fluorescent-l,daylight,cloudy-daylight,custom,temperature,incandescent,prohibition,horizon,ledlight, picture-format=jpeg, focus-distances=0.15,1.20,Infinity, factory-flash-range=-1,-1, raw-save=0, auto-exposure-lock-supported=true, curr_zoom_level=0, hdr-mode=0, antibanding-values=60hz,off}

FYI, он сообщает свой Build.PRODUCT как mproject3gub.

Ответ 1

Есть ли способ обнаружить это программно?

Не через общедоступные API, например Camera.Parameters.

Теоретически возможно, что все такие производители стандартизировали некоторый недокументированный API, например, недокументированное значение в Camera.Parameters. Также теоретически возможно, что я спонтанно вернусь к моим недостающим волосам. Я не стал бы считать, что это правда.

кто-нибудь знает список всех Android-устройств там с оптическими масштабированиями, предпочтительно с строками Build.MANUFACTURER и Build.PRODUCT.

Я сомневаюсь, что есть один, учитывая, что одно устройство, которое я знаю с оптическим зумом (Samsung Galaxy Camera), имеет значение Build.PRODUCT (gd1wifiue), отображаемое на пяти страницах всего Интернета с индексом Google, на момент написания этой статьи, включая эту страницу. Обратите внимание, что я еще не получил руки на Галактике, и поэтому возможно, что значение, о котором мне сообщили, неверно.

Ответ 2

Этот метод может помочь: Camera.Parameters.isZoomSupported():

public boolean isZoomSupported()

Возвращает true, если поддерживается масштабирование. Приложения должны вызывать это перед использованием других методов масштабирования.

(добавлен в уровень API 8)

EDIT:

Этот метод включает как цифровое, так и оптическое масштабирование!