I created a simple project to play with flashlight feature. From many different places (which all do it basically the same way), I have assembled the following code, but the flashlight will not turn on (No exceptions are raised) - but it works with the camera when I take a photo:
    @Override
    protected void onResume() {
        super.onResume();
        try {
            // check flashlight support
            hasFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
            if (!hasFlash) {
                // device doesn't support flash
                // Show alert message and close the application
                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) {
                        finish();
                    }
                });
                alert.show();
                return;
            }
            text_off = (TextView) findViewById(R.id.text_off);
            text_off.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                    return;
                }
            });
            getCamera();
            turnOnFlash();
        } catch (Exception e) {
            Log.e(this.getClass().getSimpleName(), "onResume Error: "+e.getMessage());
        }
    }
    @Override
    protected void onPause() {      
        super.onPause();
        turnOffFlash();
    }
    private void getCamera() {
        if (camera == null) {
            try {
                camera = Camera.open();
                params = camera.getParameters();
            } catch (RuntimeException e) {
                Log.e(this.getClass().getSimpleName(), "Camera Error. Failed to Open. Error: "+e.getMessage());
            }
        }   
    }
    @SuppressWarnings("deprecation")
    private void turnOnFlash() {
        try {
            Log.d(this.getClass().getSimpleName(), "turnOnFlash CHECKPOINT ");
            if (camera == null || params == null) {
                return;
            }
            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_ON); 
            // ALSO TRIED: params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
            camera.setParameters(params);
            camera.startPreview();
            isFlashOn = true;
            Log.d(this.getClass().getSimpleName(), "turnOnFlash CHECKPOINT EXIT");
        } catch (Exception e) {
            Log.e(this.getClass().getSimpleName(), "Camera Error. Failed to Open. Error: "+e.getMessage());
        }
    }
    @SuppressWarnings("deprecation")
    private void turnOffFlash() {
        try {
            Log.d(this.getClass().getSimpleName(), "turnOffFlash CHECKPOINT ");
            if (camera == null || params == null) {
                return;
            }
            params = camera.getParameters();
            params.setFlashMode(Parameters.FLASH_MODE_OFF);
            camera.setParameters(params);
            camera.stopPreview();
            camera.release();
            isFlashOn = false;
        } catch (Exception e) {
            Log.e(this.getClass().getSimpleName(), "Camera Error. Failed to Open. Error: "+e.getMessage());
        }
    }
In manifest:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
Why doesn't this code turn the flashlight on/off?
Hardware: Nexus 5
OS: Android Marshmallow
 
     
    