У меня есть фрагмент для пользовательской камеры в моем приложении, и я пытаюсь реализовать кнопку включения/выключения вспышки для моей камеры.
Прямо сейчас у меня есть что-то вроде этого:
private Camera camera;
private Camera.Parameters params;
private boolean flash;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// ...
// Flash on/off button click;
final ImageButton buttonTurnFlash = (ImageButton) view.findViewById(R.id.button_turn_flash);
buttonTurnFlash.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { turnFlash(); }
});
}
private void turnFlash() {
if (flash) flash = false;
else flash = true;
}
И затем я вызываю этот метод, когда пользователь нажимает кнопку «Сделать фото»:
private void takePicture() {
try {
if (flash) {
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
}
final Bitmap bitmap = textureView.getBitmap();
final FileOutputStream fos = Controller.getContext().openFileOutput("image.jpg", Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
} catch (Exception e) { e.printStackTrace(); }
}
Если вспышка выключена, я получаю действительно хорошее изображение. Однако, если я включу вспышку и попытаюсь сделать снимок, вспышка действительно мигает, но в результате получается фотография без вспышки, как если бы вспышка была выключена.
Я новичок в работе с камерой, но я уверен, что когда вспышка мигает, а затем вызывается метод getBitmap(), в тот момент, когда он получает растровое изображение, вспышка уже погасла или уже моргнула. Есть ли способ отложить вспышку до завершения метода getBitmap()? Каков наилучший подход для этого?