Android: Как я могу проверить, реализовано ли устройство с функциями Camera2 api или нет?

Хорошо, как я могу проверить, реализовано ли на устройстве Android функции Camera2 api или нет? В camera2 api есть много новых функций, таких как ручное управление. Итак, как я могу узнать, какие функции Camera2 api реализованы или нет, программно?

Ответ 1

На самом деле проверка на версию API 21+ будет работать. API-интерфейс camera2, включая CameraManager является частью системы и не зависит от присутствующего оборудования. Таким образом, вы всегда можете попросить CameraManager для списка CameraDevice s, который вы можете запросить по отдельности.

Тем не менее, я думаю, что вы на самом деле имеете в виду "как я могу определить, могу ли я установить фотографические параметры вручную с помощью API camera2?", Что зависит от вашего устройства. Это зависит от того, какой элемент управления вам нужен, но необходимую информацию можно получить, получив поле метаданных REQUEST_AVAILABLE_CAPABILITIES. Подсказка: ищите MANUAL_SENSOR.

Ответ 2

В самом деле, camera2 api поддерживается только с уровня API 21. Но эта проверка недостаточно. Есть устройства с уровнем API 21, но они частично поддерживают камеру 2. Чтобы проверить это, вы должны проверить значение CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL. Он может быть ПОЛНЫМ, НАРУШЕННЫМ ИЛИ ОГРАНИЧЕННЫМ. Подробнее читайте здесь: https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html

Вот как это получить:

CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);

for (String cameraId : manager.getCameraIdList()) {
                    CameraCharacteristics characteristics
                            = manager.getCameraCharacteristics(cameraId);


    Log.d("Img", "INFO_SUPPORTED_HARDWARE_LEVEL " + characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL));
 }

Ответ 3

Мне также нужно было это для другого проекта, поэтому я написал небольшое приложение, которое проверяет все функции camera2 и показывает, какие из них доступны на телефоне: https://play.google.com/store/apps/details?id=de.weis..camera2probe

Вы можете отправить этот отчет по электронной почте в приложении. Я перечисляю все отчеты, которые я получил здесь: https://github.com/TobiasWeis/android-camera2probe/wiki (там же доступен код приложения на случай, если кому-то понадобится интегрироваться в собственный проект)

Ответ 4

В случае, если кому-то нужен полный фрагмент, как определить, какая камера на устройстве поддерживает поддержку Camera2 API (по крайней мере, ограниченная поддержка):

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public boolean allowCamera2Support(int cameraId) {
        CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
        try {
            String cameraIdS = manager.getCameraIdList()[cameraId];
            CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraIdS);
            int support = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);

                if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY )
                    Log.d(TAG, "Camera " + cameraId + " has LEGACY Camera2 support");
                else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED )
                    Log.d(TAG, "Camera " + cameraId + " has LIMITED Camera2 support");
                else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL )
                    Log.d(TAG, "Camera " + cameraId + " has FULL Camera2 support");
                else
                    Log.d(TAG, "Camera " + cameraId + " has unknown Camera2 support?!");

            return support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED || support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL;
        }
        catch (CameraAccessException e) {
            e.printStackTrace();
        }
        return false;
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private void checkCamera2Support() {
        if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) {
            int numberOfCameras = 0;
            CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);

            try {
                numberOfCameras =  manager.getCameraIdList().length;
            } catch (CameraAccessException e) {
                e.printStackTrace();
            } catch(AssertionError e) {
                e.printStackTrace();
            }

            if( numberOfCameras == 0 ) {
                    Log.d(TAG, "0 cameras");
            }else {
                for (int i = 0; i < numberOfCameras; i++) {
                    if (!allowCamera2Support(i)) {
                        Log.d(TAG, "camera " + i + " doesn't have limited or full support for Camera2 API");
                    }else{
                        // here you can get ids of cameras that have limited or full support for Camera2 API
                    }
                }
            }
        }
    }

Ответ 5

Установите приложение: Совместимость с ручной камерой. Он проверяет ручную фокусировку, WB, ISO, выдержку затвора и поддержку RAW. Все экспонируются через драйвер камеры2 HAL. Я установил выше в магазине AT & T, чтобы проверять телефоны перед покупкой. Отличный способ узнать, покупаете ли вы вчера модель.

https://play.google.com/store/apps/details?id=pl.vipek.camera2_compatibility_test&hl=en

Ответ 6

Установите приложение "Лучшая камера". Вы сможете проверить, полно ли он, наследник, ограниченный или сторонний сторонник. Это как я нашел Samsung Galaxy Tab 3 SMT820 iscamera2 api полностью.

Ответ 7

Это Что такое Camera2 API? Проверьте, поддерживает ли ваш смартфон, это может помочь вам узнать это!

Camera API2

Инфраструктура Camera API2 предоставляет низкоуровневое управление камерой приложению, в том числе эффективные потоки пакетной передачи/потоковой передачи без копий и управление экспозицией, усилением, усилением баланса белого, преобразованием цветов, шумоподавлением, повышением резкости и многим другим. Подробности смотрите в видеообзоре Google I/O.

Android 5.0 и более поздние версии включают Camera API2; однако устройства под управлением Android 5.0 и более поздних версий могут не поддерживать все функции Camera API2. Свойство android.info.supportedHardwareLevel, которое приложения могут запрашивать через интерфейсы Camera API2, сообщает об одном из следующих уровней поддержки:

LEGACY: These devices expose capabilities to apps through the Camera API2 interfaces that are approximately the same capabilities as those exposed to apps through the Camera API1 interfaces. The legacy frameworks code conceptually translates Camera API2 calls into Camera API1 calls; legacy devices do not support Camera API2 features such as per-frame controls.
LIMITED: These devices support some Camera API2 capabilities (but not all) and must use Camera HAL 3.2 or later.
FULL: These devices support all of major capabilities of Camera API2 and must use Camera HAL 3.2 or later and Android 5.0 or later.
LEVEL_3: These devices support YUV reprocessing and RAW image capture, along with additional output stream configurations.
EXTERNAL: These devices are similar to LIMITED devices with some exceptions; for example, some sensor or lens information may not be reported or have less stable frame rates. This level is used for external cameras such as USB webcams.

Отдельные возможности предоставляются через свойство android.request.availableCapabilities в интерфейсах Camera API2. ПОЛНЫЕ устройства требуют, среди прочего, возможностей MANUAL_SENSOR и MANUAL_POST_PROCESSING. Возможность RAW является необязательной даже для ПОЛНЫХ устройств. Ограниченные устройства могут рекламировать любое подмножество этих возможностей, включая ни одно из них. Однако возможность BACKWARD_COMPATIBLE всегда должна быть определена.