2015-06-21 11 views
10

Cóż, jak mogę sprawdzić, czy urządzenie z Androidem ma funkcje api Camera2, czy nie? Jest wiele nowych funkcji w api camera2, takich jak sterowanie ręczne. Jak więc sprawdzić programowo, jakie funkcje Api Camera2 są zaimplementowane?Android: Jak mogę sprawdzić, czy urządzenie ma funkcje Api Camera2 zaimplementowane czy nie?

+1

Czy próbowałeś 'code'mManager = (CameraManager) getSystemService (Context.CAMERA_SERVICE); mCameraIds = mManager.getCameraIdList(); 'kod'? – thuongle

Odpowiedz

5

W rzeczywistości sprawdzanie wersji API 21+ będzie działało. Interfejs API kamery2, w tym CameraManager, jest częścią systemu, niezaleŜnie od obecnego sprzętu. Zawsze możesz więc poprosić o numer CameraManager listę CameraDevice s, którą możesz następnie przesłać pojedynczo.

Jednak myślę, że masz na myśli "jak mogę stwierdzić, czy mogę ręcznie ustawić parametry fotograficzne za pomocą interfejsu API aparatu?", Które jest w zależności od posiadanego urządzenia numerem . To zależy od tego, jakiej kontroli potrzebujesz, ale informacje, których potrzebujesz, można zebrać, uzyskując REQUEST_AVAILABLE_CAPABILITIESmetadata field. Podpowiedź: poszukaj MANUAL_SENSOR.

+0

Chodziło mi o to, aby sprawdzić, czy urządzenie Lollipop obsługuje Api Camera2, czy nie, ponieważ istnieją urządzenia Lollipop bez api Camera2. Zatem wywoływanie "CameraManager" na takim urządzeniu z api Camera2 nie zaimplementowane może spowodować awarie. Nie mówię o obsłudze sprzętu, chodzi o to, czy urządzenie ma api Camera2, czy też nie. Myślę, że moje pytanie przekierowuje cię do części sprzętowej, więc edytuję ją. Przepraszam za błąd. – Vivek

+0

W takim przypadku pierwsze zdanie z mojej odpowiedzi jest wszystkim, czego powinieneś potrzebować. – rcsumner

+0

Ale czy CameraManager jest częścią apikacji Camera2?Więc jak mogę go użyć na urządzeniu, które nie ma zaimplementowanego API? – Vivek

17

Rzeczywiście, api camera2 jest obsługiwane tylko z poziomu interfejsu API 21. Ale tylko ta kontrola nie wystarczy. Istnieją urządzenia z poziomem interfejsu API 21, ale obsługują one kamerę 2 tylko częściowo. Aby to sprawdzić, sprawdź wartość CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL. Może być FULL, LEGACY lub LIMITED. Sprawdź tutaj szczegóły: https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html

Oto jak je zdobyć:

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)); 
} 
+1

Używając powyższego kodu, otrzymujemy pewną wartość liczbową. W związku z tym wartości liczbowe dla LEGACY, LIMITED, FULL i LEVEL_3 wynoszą odpowiednio 2, 0, 1 i 3. –

1

Instalowanie aplikacji: Instrukcja Zgodność aparatu. Sprawdza ostrość ręczną, balans bieli, czułość ISO, szybkość migawki i obsługę RAW. Wszystkie odsłonięte za pośrednictwem sterownika kamery HAL camera2. Zainstalowałem powyższe w sklepie AT & T, aby sprawdzić telefony przed zakupem. Świetny sposób, aby dowiedzieć się, czy kupujesz wczorajszy model.

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

+0

Ta aplikacja nie wydaje się naprawdę sprawdzać każdej wyświetlanej dostępności funkcji. Na moim S5 Neo nie pokazuje on żadnej ręcznej kontroli, ale jestem w stanie ustawić stałą ostrość i balans bieli za pomocą api camera2. – TobiasWeis

+0

Istnieje wiele innych recenzji narzekających na ten sam problem z tą aplikacją. Wydaje się niegodny zaufania. – Scampbell

0

W przypadkach, jeśli ktoś potrzebuje pełnej fragment jak sprawdzić, która kamera w urządzeniu ma Camera2 wsparcie API (przynajmniej ograniczone wsparcie):

@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 
        } 
       } 
      } 
     } 
    } 
4

Musiałem także to dla innego projektu , więc napisałem małą aplikację, która bada wszystkie funkcje kamery2 i pokazuje, które z nich są dostępne na telefonie: https://play.google.com/store/apps/details?id=de.weis.camera2probe

Możesz wysłać ten raport pocztą e-mail z poziomu aplikacji. Wyświetlam wszystkie raporty, które tu otrzymałem: https://github.com/TobiasWeis/android-camera2probe/wiki (Kod aplikacji jest tam również dostępny, na wypadek gdyby ktoś musiał zintegrować się z własnym projektem).

0

Zainstaluj aplikację A Better Camera. Będziesz mógł sprawdzić, czy jest to kibic, który jest pełny, starszy, ograniczony lub mot. Tak właśnie znalazłem Samsung Galaxy Tab 3 SMT820 iscamera2 api full.

Powiązane problemy