2011-04-19 77 views
1

您好我想在android系統實現火炬的應用所以這裏是我的代碼火炬應用軟件Android

setContentView(R.layout.main); 
    camera = Camera.open(); 
    if(camera == null) 
     Toast.makeText(getBaseContext(),"CAMERA FAILED", Toast.LENGTH_LONG).show(); 
    else 
     Toast.makeText(getBaseContext(),"camera opened",Toast.LENGTH_LONG).show(); 
} 
public boolean dispatchKeyEvent(KeyEvent event) { 
    int action = event.getAction(); 
    int keyCode = event.getKeyCode(); 
     switch (keyCode) { 
     case KeyEvent.KEYCODE_VOLUME_UP: 
      if (action == KeyEvent.ACTION_UP) { 
       if(camera!=null) 
       { 
        Toast.makeText(getBaseContext(),"came to volume up",Toast.LENGTH_LONG).show(); 
        Parameters params = camera.getParameters(); 
        params.setFlashMode(Parameters.FLASH_MODE_ON); 
        camera.setParameters(params); 

       } 
      } 
      return true; 
     case KeyEvent.KEYCODE_VOLUME_DOWN: 
      if (action == KeyEvent.ACTION_UP) { 
       Parameters params = camera.getParameters(); 
       params.setFlashMode(Parameters.FLASH_MODE_OFF); 
       camera.setParameters(params); 
       camera.release(); 
       camera = null; 
       Toast.makeText(getBaseContext(),"came to volume down",Toast.LENGTH_LONG).show(); 
      } 
      return true; 
     default: 
      return super.dispatchKeyEvent(event); 
     } 
    } 

}

爲什麼這個代碼不工作???

+0

您是否收到任何錯誤訊息? – 2011-04-19 11:01:10

+0

不,我還沒有得到任何錯誤信息......它也會發生事件,但問題是我不能使用我的代碼閃光燈和關閉 – Durga 2011-04-19 11:02:30

+0

什麼是不工作。它拋出一個錯誤?它是否進入Key Event偵聽器?你在那裏有很多房地產,這將有助於隔離真正出問題的地方。 – Brian 2011-04-19 11:02:30

回答

1

杜爾加,

我相信你想FLASH_MODE_TORCH沒有FLASH_MODE_ON當你按下音量鍵。

也許下面的權限可能需要:FLASHLIGHTCAMERA

+0

我也嘗試過FLASH_MODE_TORCH,但它沒有working.and顯示錯誤,當我按下音量或音量降低在logcat ....(95):Hal意外的閃光模式:-1 錯誤/ QualcommCameraHardware(95):設置縮放= 1 mZoom = 1,並且當我按下音量時出現錯誤是錯誤/ QualcommCameraHardware(95) ERROR/QualcommCameraHardware(95):設置縮放= 1 mZoom = 1,你能告訴我爲什麼這些錯誤會出現嗎? – Durga 2011-04-20 09:09:23

+0

增加了您可能需要的權限,除此之外您的硬件可能不支持它?你在用什麼手機? – 2011-04-20 12:24:45

+0

使用三星銀河ACR – Durga 2011-04-21 04:20:49

0

對於三星你需要有相機預覽序爲火炬模式工作從表面上看。

你有沒有工作?

+0

還沒有。你能解釋清楚嗎? – Durga 2011-06-15 04:23:07

+0

有一個擴展SurfaceView並實現SurfaceView.Callback的類。在構造函數中,向持有者添加回調並將其類型設置爲PUSH_BUFFERS。 對於此類,請在surfaceCreated方法中初始化您的Camera對象並在其中設置相機參數。 在surfaceDestroy中,釋放相機對象。 此外,實施其他方法來確定三星設備是否有LED和設備LED點亮。 在您的活動中,聲明您的表面視圖對象將其添加到您的佈局,然後setContentView。 – KITT 2011-06-15 08:18:46

0

有一個擴展SurfaceView並實現SurfaceView.Callback的類。在構造函數中,向持有者添加回調並將其類型設置爲PUSH_BUFFERS。

對於這個類,在surfaceCreated方法中初始化您的Camera對象並在其中設置相機參數。

在surfaceDestroy中,釋放相機對象。

此外,實施其他方法來確定三星設備是否有LED和設備LED點亮。

在您的活動中,聲明您的表面視圖對象將其添加到您的佈局,然後setContentView。

+0

您的意思是SurfaceHolder.Callback? – Ivan 2011-12-29 08:31:57

0

William Tate說得對,你需要FLASH_MODE_TORCH以及兩個權限,但是在開始視頻預覽之前,相機硬件不會被觸碰。

此代碼將打開火炬(儘管你可能需要做一些錯誤在您的實際應用醒目):

Camera c = Camera.open(); 
Camera.Parameters p = c.getParameters(); 
p.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
c.setParameters(p); 
c.startPreview(); 

和格式正確的權限將看起來像這樣在你的Android清單:

<uses-permission android:name="android.permission.CAMERA"/> 
<uses-permission android:name="android.permission.FLASHLIGHT"/>