Home » Android » android – Is there a programmatic way to detect if the camera has an optical zoom?

android – Is there a programmatic way to detect if the camera has an optical zoom?

Posted by: admin May 14, 2020 Leave a comment

Questions:

There seem to be some Android devices out there with optical zooms, e.g.

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

Is there a way to detect this programmatically?

Since the camera often takes a few seconds to initialize, in my app there are some flows where I launch the camera in anticipation that the user is about to use it (so the app feels faster when they actually press my in-app camera button). If the camera has an optical zoom then I don’t want to do this, as the lens slides out and annoys the user.

If I have to blacklist these devices, does anybody know a list of all the Android devices out there with optical zooms, preferably with their Build.MANUFACTURER and Build.PRODUCT strings?

In case it helps, here are the Camera.Parameters for an S4 Zoom that I bought recently:

{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, it reports its Build.PRODUCT as mproject3gub.

How to&Answers:

Is there a way to detect this programmatically?

Not through public APIs, like Camera.Parameters.

It is theoretically possible that all such manufacturers have standardized on some undocumented API, such as some undocumented value in Camera.Parameters. It is also theoretically possible that I will spontaneously regrow my missing hair. I would not count on either of these being true.

does anybody know a list of all the Android devices out there with optical zooms, preferably with their Build.MANUFACTURER and Build.PRODUCT strings

I doubt that there is one, considering that one device that I know of with optical zoom (Samsung Galaxy Camera) has its reported Build.PRODUCT value (gd1wifiue) show up on a total of five pages on the entire Internet indexed by Google, as of the time of this writing, and including this page. Note that I have not gotten my hands on a Galaxy Camera yet, and so it is possible that the value that was reported to me is incorrect.

Answer:

This method might help:
Camera.Parameters.isZoomSupported():

public boolean isZoomSupported ()

Returns true if zoom is supported. Applications should call this before using other zoom methods.

(Added in API level 8)

EDIT:

This method includes both digital and optical zoom!