Jak korzystać z API aparatu lub camera2 systemu Android, aby obsługiwać stare i nowe wersje API bez uwag o dezaktualizacji?

Nowy API camera2 mnie myli. Chcę stworzyć aplikację (dla Androida API 10 - 21), która wykorzystuje aparat urządzenia. Jak wspomniano tutaj , powinienem użyć API "Camera".

Jednak, gdy próbuję dodać API "Camera" (android.sprzęt.Aparat) do funkcji użytkownika manifestu, jest oznaczony jako przestarzały . Z drugiej strony nie mogę go zmienić na API "camera2" (android.sprzęt.camera2) ponieważ jest kompatybilny tylko z Androidem API 21+ (Android 5-Lollipop) - też bym go połączył, ale mogę dodać tylko 2 Linki.

Nie tylko chcę, aby moja aplikacja działała na starszych wersjach Androida, ale także na najnowszej...

Author: Alex Cohn, 2014-12-03

7 answers

Mimo że stary API aparatu jest oznaczony jako przestarzały, nadal jest w pełni funkcjonalny i pozostanie tak przez dłuższy czas(prawie wszystkie aplikacje wykorzystujące aparat w Sklepie Play używają go obecnie).

Będziesz musiał zignorować skargi Android Studio na to, że jest przestarzały, ale jeśli chcesz obsługiwać Androida w wersjach wcześniejszych niż 21, musisz użyć starego API.

Na poziomie API 21 z pewnością możesz korzystać z nowego API i jego nowych funkcji, ale obecnie będziesz mieć aby zachować całkowicie oddzielny przepływ w aplikacji, Jeśli przełączasz się między interfejsami API. Niestety, oba API mają na tyle inny światopogląd, że trudno jest napisać bibliotekę wsparcia, która pozwoliłaby ci używać czegoś takiego jak nowy API na starszych urządzeniach, jak również (gdzie biblioteka mapuje z nowego API do starego API, jeśli nie NA API 21+).

 154
Author: Eddy Talvala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-09 19:12:29

Umieść wszystkie potrzebne metody z kamery w interfejsie, a następnie utwórz instancję kamery w ten sposób

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

W ten sposób będziesz miał wszystko podzielone i to sprawi, że Twoje życie będzie o wiele łatwiejsze.

[1]}mała rada-życie z camera2 nie jest takie wspaniałe. Sprzedawcy nadal robią gówniane implementacje, więc będziesz musiał dodać wiele warunków i obejść.

Przykład 1-S6 informuje, że nie obsługuje Flasha :) Przykład 2 - urządzenie LG zgłasza lista obsługiwanych rozmiarów obrazów - jednak nie wszystkie z nich są faktycznie obsługiwane!!

 38
Author: slott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-11 08:54:14

Aby Obsługiwać api, użyj poniższego kodu. Wystarczy określić odpowiednie nazwy odpowiadające poziomom api. Na przykład API 21 to LOLLIPOP, a API 15 to 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
 }
 9
Author: user0770,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-30 04:10:35

Chociaż, co Google zaleca używać Camera2 Api >= 21, ale można mieć problem z ustawieniami ręcznymi.

Gdy potrzebujesz zaimplementować aplikację do robienia zdjęć w trybie Auto Setting, będzie działać dobrze. Ale! W razie potrzeby utwórz aplikację z ręczną implementacją trybu ustawiania, dla urządzeń, które mają API >= 21, Po pierwsze, należy sprawdzić obsługiwany poziom sprzętu:

Wybierz kamerę (przód, twarz), uzyskaj jej charakterystykę i sprawdź poziom sprzętu.

mCameraCharacteristics = mCameraManager.getCameraCharacteristics(mCameraId)

val level = mCameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)

Kamery reprezentują następny obsługiwane poziomy: LIMITED, FULL, LEGACY, LEVEL_3, EXTERNAL.

Na wysokim poziomie poziomy to:

Starsze urządzenia działają w trybie zgodności wstecznej dla starszych urządzeń z Androidem i mają bardzo ograniczone możliwości.

Ograniczone urządzenia reprezentują podstawowy zestaw funkcji, a także mogą zawierać dodatkowe możliwości, które są podzbiorami pełnego.

Pełne urządzenia dodatkowo obsługują ręczne sterowanie matrycą, lampą błyskową, obiektywem i ustawienia post-processingu oraz przechwytywanie obrazu z dużą szybkością.

Urządzenia LEVEL_3 dodatkowo obsługują przetwarzanie YUV i przechwytywanie obrazu w formacie RAW, wraz z dodatkowymi konfiguracjami strumienia wyjściowego.

Jeśli masz poziom supprot LEGACY , powinieneś użyć old Camera Api .

 3
Author: Serj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 16:46:15

Użyj adnotacji wsparcia

    @TargetApi(21)

Aby uniknąć sprawdzania

 1
Author: Prudhvi Raj Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-10 12:26:48

Odkryłem, że najlepszą opcją jest utworzenie dwóch aktywności. Użyj ogólnego sposobu, aby sprawdzić, czy obecne API urządzenia

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

W ten sposób nie muszę mieć wiele zamieszania, gdy patrzę wstecz na kod. Kod jest łatwy do modyfikacji, ponieważ jest oddzielony.

 0
Author: teck wei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-18 06:53:12

Plz read link Obsługa wersji aparatu Tak twierdzą....
Aparat API1
Android 5.0 deprecated Camera API1, który nadal jest wycofywany, ponieważ rozwój nowej platformy koncentruje się na API2 Kamery. Jednak okres wycofywania będzie długi, a wersje Androida będą nadal obsługiwać Aplikacje Camera API1 przez jakiś czas. W szczególności wsparcie trwa dla:

  • interfejsy API Aparatu dla aplikacji. Aplikacje do aparatów zbudowane na bazie Camera API1 powinny działać jak robią to na urządzeniach z wcześniejszymi wersjami Androida.
  • Wersje HAL kamery. Zawiera wsparcie dla Kamery HAL1. 0.
  •  0
    Author: rajesh780,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2018-09-13 14:32:06