2014-03-26 38 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

相关问题