2015-01-26 4 views
1

У нас есть приложение, которое работает со всеми нашими поддерживаемыми телефонами Android «кроме Samsung Galaxy S5». Наше приложение использует камеру для съемки с близкого расстояния. Нам нужен режим горения в течение всего времени, когда мы фокусируемся, чтобы сделать снимок. Мы проверяем поддерживаемые параметры и устанавливаем значения, если они поддерживаются.Samsung Galaxy S5 Camera Torch не работает

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

Вот наш код:

//Set all camera parameters(flash, focus, white balance, etc) 
private void setCameraParameters() 
{ 
    //Rotate the orientation of the preview to match orientation of device 
    camera.setDisplayOrientation(getCameraRotation()); 

    //A Parameters object must be used to set the other parameters. 
    Parameters params = camera.getParameters(); 

     //Flash Mode to Torch if supported 
     if(params.getSupportedFlashModes().contains("torch")) 
     { 
      // Torch mode 
      params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     } 

     //Focus Mode to Macro if supported, Auto if not 
     if(params.getSupportedFocusModes().contains("macro")) 
     { 
      //Macro focus mode 
      params.setFocusMode(Parameters.FOCUS_MODE_MACRO); 
     } 
     else 
     { 
      //Auto focus mode 
      params.setFocusMode(Parameters.FOCUS_MODE_AUTO); 
     } 


     //White Balance mode to Auto if available. 
     List<String> supported_white = params.getSupportedWhiteBalance(); 
     if(supported_white!=null) 
     { 
      if(supported_white.contains("auto")) 
      { 
       params.setWhiteBalance(Parameters.WHITE_BALANCE_AUTO); 
      } 
     } 

     // Auto Exposure Lock to false if available 
     if(params.isAutoExposureLockSupported()) 
     { 
      params.setAutoExposureLock(false); 
     } 

     // Auto White Balance Lock if available. 
     if(params.getAutoWhiteBalanceLock()) 
     { 
      params.setAutoWhiteBalanceLock(false); 
     } 

     //JPEG quality set to 100(highest) 
     { 
      params.setJpegQuality(100); 
     } 

     //Set focus area and metering area 
     List<Camera.Area> focusArea = calculateFocusArea(); 
     params.setFocusAreas(focusArea); 
     params.setMeteringAreas(focusArea); 
     Camera.Size size = pickCameraSize(params.getSupportedPictureSizes()); 
     params.setPictureSize(size.width, size.height); 

    //Set new parameters for camera 
    camera.setParameters(params); 

    boolean torch = getTorchState(camera); 
} 

// Added this method from zxing github to see if the value is being set 
boolean getTorchState(Camera camera) { 
    if (camera != null) { 
     Camera.Parameters parameters = camera.getParameters(); 
     if (parameters != null) { 
      String flashMode = camera.getParameters().getFlashMode(); 
      return flashMode != null 
        && (Camera.Parameters.FLASH_MODE_ON.equals(flashMode) || Camera.Parameters.FLASH_MODE_TORCH 
          .equals(flashMode)); 
     } 
    } 
    return false; 
} 
+0

Добавлен метод, чтобы проверить состояние горелки. Он установлен, хотя он не включается. В приложении для родной камеры факел появляется, когда установлен. Итак, теперь я просматриваю код Google. Все еще надеясь, что у кого-то будет полезная информация. :-) – Patricia

ответ

1

Я делаю это немного отличается .. может быть, это поможет вам!

   params = getCamera().getParameters(); 
    ... 

       //Check if device supports torch mode, If YES then enable 
       List<String> supportedFlashModes = params.getSupportedFlashModes(); 
       if (supportedFlashModes != null && supportedFlashModes.contains(Parameters.FLASH_MODE_TORCH)){ 
        params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
        torchModeOn = true; 
       } 
... 

       getCamera().setParameters(params); 

Для сравнения я использую Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE и не использую setFocusAreas, setMeteringArea, setAutoWhiteBalanceLock, setWhiteBalance или setAutoExposureLock.

После просмотра кода я попытался включить каждый из них в отдельности, чтобы узнать, не повлияет ли это на мои фотографии, и вам не повезло. (Мое приложение требует крупным планом, а также

Parameters.FOCUS_MODE_MACRO не работает хорошо для меня вообще на любом из устройств я попробовал это ..

EDIT:.

Вот заказ Я настраиваю фотоаппарат упаковывают это помогает ...

 setCameraDisplayRotation(); 

     params = getCamera().getParameters(); 

     setFocusMode(); 

     //Check if device supports torch mode, If you YES then set on 
     List<String> supportedFlashModes = params.getSupportedFlashModes(); 
     if (supportedFlashModes != null && supportedFlashModes.contains(Parameters.FLASH_MODE_TORCH)){ 
      params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
      torchModeOn = true; 
     } 

     setImageResolution(); 

     getCamera().setParameters(params); // update params before preview.setCamera 
     preview.setCamera(getCamera()); 

     //... some custom code for determining the current screens available space for the preview 

     params.setPreviewSize(size.width, size.height); 

     if(setHiddenParameter(params, "zsl-values", "zsl", "on")){ 
      setUsingZsl(true); 
     }; 

     getCamera().setParameters(params); //update params after preview init 
+0

Huh! Мы можем использовать режим макросъемки. Параметры камеры показывают, что режим вспышки - это факел, но камера не отвечает. Вы меняете режим вспышки на факел «AFTER», когда загружается предварительный просмотр? Я попытался изменить порядок, и это не сработало. Мне интересно, есть ли проблема времени. – Patricia

+0

Я отредактировал ответ, чтобы включить мой заказ настройки камеры, если это вам поможет. Я не могу заставить Macro Mode сфокусироваться либо с помощью tap или takePicture, но я не пробовал это снова после ZSL-откровения. – BBaker

Смежные вопросы