2014-02-12 73 views
1

我絕對不知道如何實現這一點。它在我的Razr上正常工作,但在很多三星設備上都失敗了。我有一個運行相機預覽的SurfaceView。我已經包含了一個使用手電筒的按鈕。拋出異常,我插入try塊:RuntimeException與三星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)所不支持你的三星設備,因此它不會在這個模型上工作。我認爲它可能根本沒有內置閃光燈。

+0

我不這麼認爲,因爲它必須經過幾次檢查。首先檢查getPackageManager()。hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)的hasFlash方法。然後getSupportedFlashModes檢查,然後檢查閃存模式是否包含FLASH_MODE_TORCH –

+0

它如何通過所有這些檢查? –

+0

@ user3029413好的,這個'RuntimeException'的細節是什麼?你有什麼? –