Как использовать камеру Android или camera2 API для поддержки старых и новых версий API без замечаний об устаревании?



новый API camera2 смущает меня. Я хочу разработать приложение (для Android API 10 - 21) который использует камеру устройства. Как сказано здесь, Я должен использовать API "камера".



однако, когда я пытаюсь добавить API "камеры"(android.аппаратура.Камера) к пользовательским функциям манифеста,он помечается как deprecated. С другой стороны, я не могу изменить его на API "camera2"(android.аппаратура.camera2) С тех пор он совместим только с Android API 21+ (Android 5 - Lollipop) - связал бы его тоже, но я могу добавить только 2 ссылки.



Я хочу, чтобы мое приложение работало не только на старых версиях Android, но и на самых новых...

828   7  

7 ответов:

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

вам придется игнорировать жалобы Android Studio на то, что он устарел, но если вы хотите поддерживать версии Android ранее 21, вам нужно использовать старый API.

на уровне API 21, Вы можете, конечно, использовать новый API и его новые функции, но в настоящее время вам придется поддерживать полностью отдельный поток в вашем приложении, если вы переключаетесь между API. К сожалению, два API имеют достаточно разное мировоззрение, что трудно написать библиотеку поддержки, которая позволила бы вам использовать что-то вроде нового API на старых устройствах (где библиотека сопоставляется с новым API на старый API, если не на API 21+).

Поместите все методы из камеры, которые вам нужны в интерфейсе, а затем создайте экземпляр камеры, как это

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Log.d(TAG, "camera2 selected");
        this.camera = new Camera2(getContext());
    } else {
        Log.d(TAG, "camera1 selected");
        this.camera = new Camera1(getContext());
    }

таким образом, вы будете иметь все разошлись, и это сделает вашу жизнь намного проще.

слово совета-жизнь с camera2 не так уж и велика. Вендеры все еще делают дерьмовые реализации, и вам, таким образом, придется добавить много условий и обходных путей.

Пример 1-S6 сообщает, что он не поддерживает flash :) Пример 2 - В LG device сообщает список поддерживаемых размеров изображений - однако не все из них на самом деле поддерживаются!!

для поддержки api вы хотите, используйте код ниже. Просто определите соответствующие имена, соответствующие уровням api. Например, API 21-это LOLLIPOP, а API 15-ICE_CREAM_SANDWICH_MR1.

 if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)  
                                    && ((Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP))) {
           // your code here - is between 15-21

 } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
           // your code here - is api 21
 }

хотя, что Google рекомендует использовать Camera2 Api >= 21, но у вас могут быть проблемы с ручными настройками.

когда вам нужно реализовать приложение для съемки фотографий в режиме автоматической настройки, он будет работать нормально. Но! Если нужно создать приложение с ручной настройкой режима реализации, для устройств, которые имеют API >= 21, Во-первых, нужно проверить поддерживаемый аппаратный уровень:

выберите камеру(передняя, лицевая), получите ее характеристики и проверьте аппаратное обеспечение УРОВЕНЬ.

mCameraCharacteristics = mCameraManager.getCameraCharacteristics(mCameraId)

val level = mCameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)

CameraCharacteristics представляют следующие поддерживаемые уровни: ОГРАНИЧЕННЫЙ, ПОЛНЫЙ, УНАСЛЕДОВАННЫЙ, LEVEL_3, ВНЕШНИЙ.

на высоком уровне, уровни:

наследие устройства работают в режиме обратной совместимости для старых устройств Android, и имеет очень ограниченные возможности.

LIMITED устройства представляют базовый набор функций, а также могут включать дополнительные возможности, которые являются подмножествами ПОЛНЫЙ.

полное устройства дополнительно поддерживают ручное управление сенсором, вспышкой, объективом и настройками постобработки, а также захват изображения с высокой скоростью.

LEVEL_3 устройства дополнительно поддерживают повторную обработку YUV и захват необработанного изображения, а также дополнительные конфигурации выходного потока.

Если у вас наследие уровень supprot, вы должны используйте старый Api камеры.

используйте аннотацию поддержки

    @TargetApi(21)

чтобы избежать проверки

я узнал, что лучший вариант-создать два действия. Используйте общий способ проверки текущего API устройства

Intent i;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    i = new Intent(context,camera2.class)
} else {
    i = new Intent(context,camera.class);
}
startActivity(i);

таким образом, я не должен иметь много путаницы, когда оглядываюсь на код. Код легко изменить, так как он разделяется.

читать ссылке Поддержка Версии Камеры Они утверждают это....
камера API1
Android 5.0 устарела камера API1, которая продолжает постепенно сворачиваться, поскольку разработка новой платформы фокусируется на камере API2. Однако период поэтапного отказа будет длительным, и выпуски Android будут продолжать поддерживать приложения камеры API1 в течение некоторого времени. В частности, поддержка продолжается:

  • камера API1 интерфейсы для приложений. Приложения для камеры, построенные на верхняя часть камеры API1 должна работать так же, как и на устройствах, работающих под управлением более ранних версий Android.
  • Фотоаппарат Хэла версии. Включает поддержку HAL1 камеры.0.
  • Comments

      Ничего не найдено.