2014-02-12 2 views
1

У меня нет абсолютно никакой идеи, как реализовать это. Он отлично работает на моем Razr, но не работает на многих устройствах Samsung. У меня есть SurfaceView, запускающий предварительный просмотр камеры. Я включил кнопку, чтобы использовать фонарик. Исключение, когда я вставил попробовать блок:RuntimeException с Samsung Galaxy - фонарик

if (hasFlash()) { 
     btnLight = (ImageButton) findViewById(R.id.btn_light); 
     btnLight.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Parameters p = camera.getParameters(); 
       if (p.getSupportedFlashModes() != null) { 
        if (p.getSupportedFlashModes().contains(
          Parameters.FLASH_MODE_TORCH)) { 
         if (isLightOn) { 
          p.setFlashMode(Parameters.FLASH_MODE_OFF); 
          camera.setParameters(p); 
          btnLight.setImageResource(R.drawable.light_on); 
          isLightOn = false; 
         } else { 
          try { 
           p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
           camera.setParameters(p); 
           btnLight.setImageResource(R.drawable.light_off); 
           isLightOn = true; 
          } catch (RuntimeException e){ 
           // I don't know how to make this stupid thing work for all phones 
          } 
         } 
        } 
       } 
      } 
     }); 
+0

Обычно я распечатываю все параметры камеры и проверяю, какие значения я могу использовать. Аппаратные API не могут работать для всех устройств. – yushulx

ответ

2

В Android documentation вы можете прочитать:

public void setParameters (Camera.Parameters params) 

Throws 
RuntimeException if any parameter is invalid or not supported. 

Это означает, что вы используете параметр камеры (FLASH_MODE), который не поддерживается вашего устройства Samsung и, следовательно, он не будет работать на этой модели. Я предполагаю, что он, вероятно, просто не имеет встроенной вспышки.

+0

Я так не думаю, потому что он должен пройти несколько проверок. Сначала метод hasFlash, который проверяет getPackageManager(). HasSystemFeature (PackageManager.FEATURE_CAMERA_FLASH). Затем проверьте getSupportedFlashModes, затем я проверяю, содержит ли Flash-режимы FLASH_MODE_TORCH –

+0

. Как он может пройти все эти проверки? –

+0

@ user3029413 Хорошо, каковы детали этого 'RuntimeException'? У вас есть? –

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