Подтвердить что ты не робот

Android: Проверьте, поддерживает ли камера автофокусировку?

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

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)

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

4b9b3361

Ответ 1

List<String> supportedFocusModes = camera.getParameters().getSupportedFocusModes();
boolean hasAutoFocus = supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)

Ответ 2

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

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

   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);
        }
    }

Ответ 4

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

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