0

我有一个简单的应用程序,button可以打开/关闭camera flash

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button)findViewById(R.id.btnFlash);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if(!isLight)
                {
                    switchON();
                }
                else
                {
                    switchOFF();
                }
            }
        });
    }

如果闪光灯关闭,它将打开,否则,关闭。是的,它运作良好。问题是: - 首先,我按下button打开,然后旋转我的设备,然后再次按下关闭 -> 应用程序崩溃。

致命异常:main - 运行时异常:无法连接到相机服务

这些是打开/关闭的 2 个功能

public void switchON()
    {
        camera = Camera.open();
        Parameters p = camera.getParameters();
        p.setFlashMode(Parameters.FLASH_MODE_TORCH);
        camera.setParameters(p);
        camera.startPreview();
        isLight = true;
    }

    public void switchOFF()
    {
        Parameters p = camera.getParameters();
        p.setFlashMode(Parameters.FLASH_MODE_OFF);
        camera.setParameters(p);
        camera.stopPreview();
        camera.release();
        isLight = false;
    }
4

2 回答 2

1

试试这个(我重写了代码):

public class YourClass extends Activity {

    private Button button;
    private Camera camera;
    private boolean isLight=false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button = (Button)findViewById(R.id.btnFlash);
        button.setOnClickListener(new OnClickListener() {

         @Override
            public void onClick(View v) {
                if(!isLight)
                {
                    switchON();
                }
                else
                {
                    switchOFF();
                }
            }
        });


   }

    @Override
    protected void onResume() {
        super.onResume();
        try{
            camera = Camera.open();
        } catch( Exception e ){
            e.printStackTrace();
        }
    }

    @Override
    protected void onPause() {
        if( camera != null ){
            camera.release();
            camera = null;
        }
        super.onPause();
    }

    private void switchOFF(){
        if( mCamera != null ){
            Parameters p = camera.getParameters();
        p.setFlashMode(Parameters.FLASH_MODE_OFF);
        camera.setParameters(p);
        isLight = false;
        }
    }

    private void switchON(){
        if( mCamera != null ){
            Parameters p = camera.getParameters();
        p.setFlashMode(Parameters.FLASH_MODE_TORCH);
        camera.setParameters(p);
        isLight=true;
        }
    }
}
于 2014-02-26T09:01:39.060 回答
0

尝试:

 public void switchOFF()
    {

    if(camera == null)
    {
        camera = Camera.open();
    }
        Parameters p = camera.getParameters();
        p.setFlashMode(Parameters.FLASH_MODE_OFF);
        camera.setParameters(p);
        camera.stopPreview();
        camera.release();
        isLight = false;
    }
于 2014-02-26T09:03:03.523 回答