Новый API Camera2 смущает меня. Я хочу разработать приложение (для Android API 10 - 21), которое использует камеру устройства. Как указано здесь , я должен использовать API «Камера».
Однако когда я пытаюсь добавить API-интерфейс «Камера» (android.hardware.Camera) в пользовательские функции манифеста, он помечается как устаревший . С другой стороны, я не могу изменить его на API "camera2" (android.hardware.camera2), поскольку он совместим только с Android API 21+ (Android 5 - Lollipop) - тоже связал бы его, но я могу только добавить 2 ссылки.
Я хочу, чтобы мое приложение не только работало на старых версиях Android, но и на самой новой ...
источник
Поместите все методы из камеры, которые вам нужны, в интерфейс, а затем создайте экземпляр камеры, как это
Таким образом у вас будет все разделено, и это сделает вашу жизнь намного проще.
Совет - жизнь с camera2 не так уж и хороша. Продавцы по-прежнему делают дерьмовые реализации, и вам придется добавить множество условий и обходных путей.
Пример 1 - S6 сообщает, что не поддерживает флэш-память :) Пример 2 - Устройство LG сообщает список поддерживаемых размеров изображения, однако на самом деле не все из них поддерживаются !!
источник
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraID); if (characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)...
и выбрать старый API, если это правда.Для поддержки API, который вы хотите, используйте код ниже. Просто определите соответствующие имена соответствующих уровней API. Например, API 21 - это LOLLIPOP, а API 15 - это ICE_CREAM_SANDWICH_MR1.
источник
Хотя, что Google рекомендует использовать Camera2 Api> = 21, но у вас могут возникнуть проблемы с ручными настройками.
Когда вам понадобится приложение для фотографирования в режиме автоматической настройки, оно будет работать нормально. Но! Если необходимо создать приложение с реализацией в режиме ручной настройки, для устройств с API> = 21, во-первых, необходимо проверить поддерживаемый уровень аппаратного обеспечения:
Выберите камеру (Front, Face), получите ее характеристики и проверьте УРОВЕНЬ ОБОРУДОВАНИЯ.
Характеристики камеры представляют следующие поддерживаемые уровни: LIMITED, FULL, LEGACY, LEVEL_3, EXTERNAL.
На высоком уровне это следующие уровни:
Устаревшие устройства работают в режиме обратной совместимости со старыми устройствами Android и имеют очень ограниченные возможности.
ОГРАНИЧЕННЫЕ устройства представляют собой базовый набор функций и могут также включать дополнительные возможности, которые являются подмножествами ПОЛНОГО.
ПОЛНЫЕ устройства дополнительно поддерживают покадровое ручное управление настройками датчика, вспышки, объектива и последующей обработки, а также захват изображения с высокой скоростью.
Устройства LEVEL_3 дополнительно поддерживают повторную обработку YUV и захват изображений RAW, а также дополнительные конфигурации выходного потока.
Если у вас есть уровень поддержки LEGACY , вам следует использовать старый Camera Api .
источник
Используйте аннотацию поддержки
чтобы избежать проверки
источник
Пожалуйста, прочтите ссылку Поддержка версии камеры. Они заявляют, что ....
Camera API1
Android 5.0 устарел Camera API1, который постепенно прекращается, поскольку разработка новой платформы сосредоточена на Camera API2. Однако период поэтапного отказа будет продолжительным, и выпуски Android будут поддерживать приложения Camera API1 еще некоторое время. В частности, поддержка продолжается для:
источник
Я выяснил, что лучший вариант - создать два вида деятельности. Используйте общий способ проверки текущего API устройства
Таким образом, я не должен сильно путаться, когда оглядываюсь назад на код. Код легко изменить, так как он разделен.
источник