Как предотвратить выключение фонарика при открытой камере или нет? - PullRequest
0 голосов
/ 17 марта 2019

Пожалуйста, помогите ... Я разрабатываю приложение для фонарика. У меня есть кнопка для включения и выключения вспышки вручную. Вначале при нажатии кнопки включается вспышка, и при повторном нажатии она выключается. Когда я запускаю камеру с телефона, вспышка автоматически отключается. Как предотвратить автоматическое выключение вспышки при открытии или закрытии камеры? Я отправлю свои коды. Пожалуйста, помогите мне.

// Секция кодирования

public class MainActivity extends AppCompatActivity {
    //Intialise Button
    Button button_camera;
    boolean cameraAvailability = false;
    boolean flashlight_available = false;
    private Camera mCamera;
    private Camera.Parameters parameters;
    private CameraManager camManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button_camera = findViewById(R.id.button_camera);
        //onclick listener for button
        button_camera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Checking whether flash is available for camera
                cameraAvailability = MainActivity.this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
                if (cameraAvailability) {
                    //Toast.makeText(getApplicationContext(),"flash is available",Toast.LENGTH_SHORT).show();
                    //if flash light is not turned on
                    //Turning on flash light
                    if (!flashlight_available) {
                        turnFlashlightOn();
                    }
                    //if flash light is already on
                    //Closing the flash light
                    else {
                        turnFlashlightOff();
                    }
                } else {
                    //if no flash light is available
                    //Show a dialog with some message
                    // Show alert message and close the dialog
                    final AlertDialog alert = new AlertDialog.Builder(MainActivity.this)
                            .create();
                    alert.setTitle("Error");
                    alert.setMessage("Sorry, your device doesn't support flash light!");
                    alert.setButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            // closing the dialog
                            alert.dismiss();
                        }
                    });
                    alert.show();
                }
            }
        });

    }

    private void turnFlashlightOn() {
        //In API 23 or Higher (Android M, 6.0)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            try {
                camManager = (CameraManager) getApplicationContext().getSystemService(Context.CAMERA_SERVICE);
                String cameraId = null; // Usually front camera is at 0 position.
                if (camManager != null) {
                    cameraId = camManager.getCameraIdList()[0];
                    camManager.setTorchMode(cameraId, true);
                    flashlight_available = true;
                }
            } catch (CameraAccessException e) {
                Log.e("Error camera", e.toString());

            }
        }
        //In Api <23
        else {
            mCamera = Camera.open();
            parameters = mCamera.getParameters();
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            mCamera.setParameters(parameters);
            mCamera.startPreview();
            flashlight_available = true;
        }

    }


    private void turnFlashlightOff() {
        //In API 23 or Higher (Android M, 6.0)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            try {
                String cameraId;
                camManager = (CameraManager) getApplicationContext().getSystemService(Context.CAMERA_SERVICE);
                if (camManager != null) {
                    cameraId = camManager.getCameraIdList()[0]; // Usually front camera is at 0 position.
                    camManager.setTorchMode(cameraId, false);
                    flashlight_available = false;
                }
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        }
        //In Api <23
        else {
            mCamera = Camera.open();
            parameters = mCamera.getParameters();
            parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            mCamera.setParameters(parameters);
            mCamera.stopPreview();
            flashlight_available = false;
        }
    }
}
...