android 相机应用闪光灯

android camera application flash

我在自定义相机应用程序中遇到问题。打开闪光灯功能后,phone拍了第一张照片,但第二张照片没有使用闪光灯。

  flashCameraButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isPressed) {
                flashCameraButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.onflash));

                flashOnButton();
            } else if (isPressed) {
                flashCameraButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.offflash));
                isPressed = !isPressed;
                flashOffButton();
            } else
                flashCameraButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.onflash));
            flashOnButton();
        }
    });

    private void flashOnButton() {
    if (camera != null) {
        try {
            Camera.Parameters param = camera.getParameters();
            param.setFlashMode(!flashmode ? Camera.Parameters.FLASH_MODE_ON
                    : Camera.Parameters.FLASH_MODE_ON);
            camera.setParameters(param);
            flashmode = !flashmode;
        } catch (Exception e) {
            // TODO: handle exception
        }

    }
}
   private void flashOffButton() {
    if (camera != null) {
        try {
            Camera.Parameters param = camera.getParameters();
            param.setFlashMode(!flashmode ? Camera.Parameters.FLASH_MODE_OFF
                    : Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(param);
            flashmode = !flashmode;
        } catch (Exception e) {
            // TODO: handle exception
        }

    }
}

看看下面的代码。你可以做类似的事情:

btnSwitch.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (isFlashOn) {
                // turn off flash
                //change the picture 
                turnOffFlash();
            } else {
                // turn on flash
                //change the picture
                turnOnFlash();
            }
        }
    });
}


// Get the camera
private void getCamera() {
    if (camera == null) {
        try {
            camera = Camera.open();
            params = camera.getParameters();
        } catch (RuntimeException e) {
            Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
        }
    }
}


 // Turning On flash
private void turnOnFlash() {
    if (!isFlashOn) {
        if (camera == null || params == null) {
            return;
        }


        params = camera.getParameters();
        params.setFlashMode(Parameters.FLASH_MODE_TORCH);
        camera.setParameters(params);
        camera.startPreview();
        isFlashOn = true;


    }

}


// Turning Off flash
private void turnOffFlash() {
    if (isFlashOn) {
        if (camera == null || params == null) {
            return;
        }


        params = camera.getParameters();
        params.setFlashMode(Parameters.FLASH_MODE_OFF);
        camera.setParameters(params);
        camera.stopPreview();
        isFlashOn = false;


    }
}

我们这里做的是检查Flash是开着还是关着,如果开着我们调用方法turnOffFlash()关掉它,如果关掉我们调用方法turnOnFlash()关掉它在。