getSupportedPictureSize () zwraca wartość, która nie jest obsługiwana przez Nexus4

Rozszerzyłem SurfaceView do wyświetlania przekazu kamery dla bardzo prostej aplikacji kamery. Aby znaleźć optymalny rozmiar podglądu dla każdego urządzenia, użyłem tego przykładowego kodu, który jest używany w prawie wszystkich aplikacjach kamer open source, które widziałem:

    List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
    double minDiff = Double.MAX_VALUE;
    for (Camera.Size size : sizes) {
        if (Math.abs(size.width - width) < minDiff) {
        screenWidth = size.width;
        screenHeight = size.height;
        minDiff = Math.abs(size.width - width);
        }
    }

Wszystko działa doskonale do tego momentu.

Teraz, ze względu na naturę aplikacji, muszę zachować dwie bitmapy w pamięci podczas sesji i dla uproszczenia (unikanie problemów z pamięcią podczas testowania) użyłem tego samego kodu dla ROZMIARU OBRAZU (zastąpiłem getSupportedPreviewSizes () z getSupportedPictureSizes ()). Wszystko działa świetnie na większości urządzeń, ale muszę wybrać inny sposób wyboru optymalnego rozmiaru obrazu dla każdego urządzenia.

Ostatnio, podczas testowania na urządzeniu Nexus 4, powyższa pętla nie powiodła się przy wyborze optymalnego rozmiaru obrazu. Po zbadaniu dowiedziałem się, że funkcje getSupportedPictureSizes () zwracają wartość, tj. 1280 * 960, która nie jest faktycznie obsługiwana przez kamerę Nexus 4. Jak więc rozwiązać ten problem? To znaczy, czy ta funkcja nie ma TYLKO zwracać tych wartości, które obsługuje KAMERA urządzenia? Jestem pewien, że będą inne urządzenia z tym samym problemem, których nie będę mógł przetestować. Jakieś wskazówki, jak rozwiązać ten problem?

AKTUALIZACJA: Co się dzieje, że akceptuje niewłaściwy parametr bez żadnego błędu i obraz, który powraca, jest zniekształcony, spróbuję również uzyskać zdjęcie tutaj. Ponadto nie ma wyjątków czasu wykonywania.

questionAnswers(3)

yourAnswerToTheQuestion