Android: проверьте, поддерживает ли камера автофокус? - PullRequest
19 голосов
/ 06 декабря 2010

Для Android API версии 2.1 и выше мы можем использовать контекст:

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)

Но до версии 2.1 как мы можем выполнить ту же операцию? Есть ли что-то подобное, что не требует вызова Camera.open, а затем getParameters?

Ответы [ 5 ]

21 голосов
/ 24 апреля 2014
List<String> supportedFocusModes = camera.getParameters().getSupportedFocusModes();
boolean hasAutoFocus = supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)
6 голосов
/ 24 февраля 2011

Я предполагаю: не используйте неизвестную константу.

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)

Должно быть:

getPackageManager().hasSystemFeature("android.hardware.camera.autofocus")

Разработчики не могли использовать здесь константы. Это решает проблему определения, есть ли на устройстве, работающем с API, который знает о функции, функция. но терпит неудачу в случае, который вы только что упомянули ... они действительно затрудняют поддержку нескольких уровней API.

Обновлено : только что сам проверил ... PackageManager.hasSystemFeature () обнаружился только на уровне API 5. Я пытался добавить эту проверку в мой код, который может очень хорошо поддерживать уровень API 3 ( 1.5) но которая может выиграть от автофокуса камеры ... кажется, что мне нужно выбрать поддержку 1.5 или иметь возможность использовать автофокусировку ... или переместить мою обратную совместимость на уровень 5 ... или реализовать это http://www.java.net/forum/topic/java-tools/java-development-tools/wwyt-conditional-compilation-pre-process ... да, верно.

они действительно затрудняют поддержку нескольких версий. Так что извините 1.5 и 1.6 и 2.0 пользователей. так как мое устройство на 2.2, это будет моей нижней строкой.

3 голосов
/ 15 апреля 2015
   private void getSuppourtedFocusedModes(Camera camera) 
   {
        final Camera.Parameters parameters = camera.getParameters();
        List<String> supportedFocusModes = parameters.getSupportedFocusModes();
        LogUtils.infoMsg("supportedFocusModes " + supportedFocusModes);
        for (String mode : supportedFocusModes) {
            LogUtils.infoMsg("supportedFocusModes " + mode);
        }
    }
1 голос
/ 27 февраля 2018
CameraManager cameraManager = (android.hardware.camera2.CameraManager) getSystemService(CAMERA_SERVICE);

int[] afModes = cameraManager.getCameraCharacteristics("0").get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);

if (afModes.length <= 1)
{Log.d(TAG, "Camera doesn't have autofocus");}
else
{Log.d(TAG, "Camera has autofocus");}

        Log.d(TAG, "CONTROL_AF_AVAILABLE_MODES:");
        for (int position : afModes) {
            switch (afModes[position]) {
                case 0:
                    Log.d(TAG, "CONTROL_AF_MODE_OFF (0)");
                    break;
                case 1:
                    Log.d(TAG, "CONTROL_AF_MODE_AUTO (1)");
                    break;
                case 2:
                    Log.d(TAG, "CONTROL_AF_MODE_MACRO (2)");
                    break;
                case 3:
                    Log.d(TAG, "CONTROL_AF_MODE_CONTINUOUS_VIDEO (3)");
                    break;
                case 4:
                    Log.d(TAG, "CONTROL_AF_MODE_CONTINUOUS_PICTURE (4)");
                    break;
                case 5:
                    Log.d(TAG, "CONTROL_AF_MODE_EDOF (5)");
                    break;
                default:
                    Log.d(TAG, String.valueOf(afModes[position]));
            }
        }
0 голосов
/ 06 декабря 2010

Существует ряд методов класса Camera.Parameters, добавленных в API Level 5 (я считаю, что сопоставляется с Android 2.0), которые будут возвращать список поддерживаемых функций.Вызовите getSupportedFocusModes для объекта Camera.Parameters, полученного из camera.getParameters ()

http://developer.android.com/reference/android/hardware/Camera.Parameters.html

...