Nowe API camera2 wprawia mnie w zakłopotanie. Chcę stworzyć aplikację (dla Android API 10-21), która korzysta z aparatu urządzenia. Jak wspomniano tutaj , powinno się używać „Aparat” API.
Jednak gdy próbuję dodać interfejs API „Camera” (android.hardware.Camera) do funkcji użytkownika manifestu, jest on oznaczany jako przestarzały . Z drugiej strony nie mogę go zmienić na API "camera2" (android.hardware.camera2), ponieważ jest kompatybilny tylko z Android API 21+ (Android 5 - Lollipop) - też bym go połączył, ale mogę tylko dodać 2 linki.
Chcę, aby moja aplikacja działała nie tylko na starszych wersjach Androida, ale także na najnowszej ...
Umieść wszystkie potrzebne metody z kamery w interfejsie, a następnie utwórz taką instancję kamery
W ten sposób wszystko się rozdzieli, a to znacznie ułatwi ci życie.
Mała rada - życie z aparatem camera2 nie jest takie wspaniałe. Sprzedawcy nadal robią badziewne implementacje, więc będziesz musiał dodać wiele warunków i obejść.
Przykład 1 - S6 zgłasza, że nie obsługuje Flasha :) Przykład 2 - Urządzenie LG zgłasza listę obsługiwanych rozmiarów obrazów - jednak nie wszystkie z nich są faktycznie obsługiwane !!
źródło
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraID); if (characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)...
i wybranie starego API, jeśli jest prawdziwe.Aby obsługiwać żądany interfejs API, użyj poniższego kodu. Po prostu określ odpowiednie nazwy odpowiadające poziomom API. Na przykład API 21 to LOLLIPOP, a API 15 to ICE_CREAM_SANDWICH_MR1.
źródło
Chociaż to, co zaleca Google, użyj Camera2 Api> = 21, ale możesz mieć problem z ustawieniami ręcznymi.
Kiedy potrzebujesz aplikacji do robienia zdjęć w trybie ustawień automatycznych, będzie działać dobrze. Ale! W razie potrzeby utwórz aplikację z implementacją trybu ustawień ręcznych, dla urządzeń, które mają API> = 21, najpierw sprawdź obsługiwany POZIOM SPRZĘTU:
Wybierz kamerę (przód, twarz), uzyskaj jej charakterystykę i sprawdź POZIOM SPRZĘTU.
CameraCharacteristics reprezentują kolejne obsługiwane poziomy: LIMITED, FULL, LEGACY, LEVEL_3, EXTERNAL.
Na wysokim poziomie poziomy to:
Urządzenia LEGACY działają w trybie kompatybilności wstecznej dla starszych urządzeń z Androidem i mają bardzo ograniczone możliwości.
Urządzenia OGRANICZONE reprezentują podstawowy zestaw funkcji i mogą również obejmować dodatkowe możliwości, które stanowią podzbiory FULL.
PEŁNE urządzenia dodatkowo obsługują ręczne sterowanie dla poszczególnych klatek ustawieniami czujnika, lampy błyskowej, obiektywu i przetwarzania końcowego oraz przechwytywanie obrazu z dużą szybkością.
Urządzenia LEVEL_3 dodatkowo obsługują ponowne przetwarzanie YUV i przechwytywanie obrazu RAW, a także dodatkowe konfiguracje strumienia wyjściowego.
Jeśli masz poziom supprot LEGACY , powinieneś użyć starego interfejsu Camera Api .
źródło
Użyj adnotacji wsparcia
aby uniknąć sprawdzania
źródło
Plz read link Obsługa wersji kamery Stwierdzają, że ....
Camera API1
Android 5.0 jest przestarzały Camera API1, który nadal jest wycofywany, ponieważ rozwój nowej platformy koncentruje się na Camera API2. Jednak okres wycofywania będzie długi, a wersje Androida będą przez pewien czas nadal obsługiwać aplikacje Camera API1. W szczególności wsparcie jest kontynuowane dla:
źródło
Dowiedziałem się, że najlepszą opcją jest utworzenie dwóch zajęć. Użyj ogólnego sposobu, aby sprawdzić bieżący interfejs API urządzenia
W ten sposób nie muszę mieć dużo zamieszania, gdy patrzę wstecz na kod. Kod można łatwo modyfikować, ponieważ został oddzielony.
źródło