2014-03-26 70 views
0

我不知道如何在我的應用程序中處理相機閃光燈。 我的應用程序有一個按鈕,打開和關閉相機閃光燈,一切正常,應用程序工作正常,即使按下按鈕,回到應用程序它的工作正常。如何在應用程序生命週期中處理相機閃光燈

但是,當我按下HOME按鈕,當應用程序正在運行,然後回到我的應用程序,當我按下ON和OFF按鈕它崩潰(強行關閉)。 我認爲問題出在app的生命週期中,但我不知道如何解決它。

中的onStop()方法

,我用這個代碼:

@Override 
    protected void onStop() { 
     super.onStop(); 

     if (camera != null) { 
      camera.stopPreview(); 
      camera.release(); 
     } 

,並使用此代碼打開中的onCreate閃光燈()方法:

   Parameters p = camera.getParameters(); 
       if (!isLightOn) { 
        p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
        camera.setParameters(p); 
        camera.startPreview(); 
        isLightOn = true; 
           } 
+1

而不是'onCreate' /'onStop'在'onResume'中初始化您的相機並在'onPause'中釋放它和它的surfaceView。此外,請參閱http://stackoverflow.com/questions/8481402如果您有類似的問題 – kiruwka

+0

@kiruwka,該鏈接的答案沒有幫助我,正如你所說我改變了我的代碼和初始化相機在'onResume()'和在'onPause()'中釋放它,但仍然不起作用,我不熟悉'surfaceView',不知道如何釋放'surfaceView'。 – MehrdadSComputer

+0

在kiruwka和@Fox的幫助下,此鏈接[鏈接](http://stackoverflow.com/questions/14422190/refresh-activity-using-onresume/14422200#14422200),我的應用程序現在工作正常,爲更多信息請查看鏈接。 – MehrdadSComputer

回答

2

你需要重寫的onResume方法你的活動。它可能看起來像這樣:

@Override 
protected void onResume() { 
    super.onResume(); 

    if(camera == null){ 
     camera = getCamera(); 
     try { 
      SurfaceHolder holder = cameraPreview.getHolder(); 
      camera.setPreviewDisplay(holder); 

      cameraPreview.setCamera(camera); 
      holder.addCallback(cameraPreview); 

      camera.startPreview(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

對不起,我不知道你的代碼做了什麼以及如何在我的應用程序中使用你的代碼,是否有另一種方法來處理onResume()方法中的Flash? – MehrdadSComputer

+0

@MehrdadSalimi不在閃存中的問題,相機實例中的問題。當你調用home按鈕方法'onStop'調用。然後,當你啓動你的應用程序方法'onCreate'不會調用。 – eleven

+0

我在'onResume()'中更改了代碼並啓動了攝像頭,但仍然不起作用,我重寫了'onPause()'方法並使用'camera.release()',但仍然無法工作。 – MehrdadSComputer

相關問題