How to turn on the flashlight and front camera at the same time in android

In one of the requirements in my application, I need to open an activity containing a camera preview, at the same time I also need to turn on the flashlight. However, I am observing this, I can turn on the flashlight and rear view camera, but not the front camera and flashlight together. The following is my code:

public class Cam extends Activity { private static int cameraId = 0; private Camera camera; //Adding for camera preview public static FrameLayout preview; public static CameraPreview mPreview; Context context; ImageButton btnSwitch; private boolean isFlashOn; private boolean hasFlash; Parameters params; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("Cam","Inside onCreate"); setContentView(R.layout.cam); context = getApplicationContext(); btnSwitch = (ImageButton) findViewById(R.id.btnSwitch); hasFlash = getApplicationContext().getPackageManager() .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); startCamera(); // displaying button image toggleButtonImage(); btnSwitch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isFlashOn) { turnOffFlash(); } else { turnOnFlash(); } } }); } @Override protected void onPause() { super.onPause(); turnOffFlash(); Log.e("Cam","Inside onPause"); try { if (camera != null) { camera.release(); camera = null; preview.removeView(mPreview); } } catch (Exception e) { e.printStackTrace(); } } @Override protected void onResume() { super.onResume(); Log.e("Cam","Inside onResume"); try { if(camera ==null) { Log.d("Cam","in resume,camera is null"); try { camera = android.hardware.Camera.open(cameraId); //opens front cam // camera = Camera.open(); when I use this I can on/off the flashlight,since I am using the back camera. mPreview = new CameraPreview(this, camera); preview = (FrameLayout) findViewById(R.id.camera_preview); preview.addView(mPreview); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); Log.e("Cam","Inside onDestroy"); if (camera != null) { try { camera.release(); camera = null; preview.removeView(mPreview); } catch (Exception e) { e.printStackTrace(); } } } private void startCamera() { Log.e("Cam","Inside doInBackground"); String msg = ""; // Do we have a camera? try { if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) { } else { cameraId = AppFunctions.findFrontFacingCamera();//A function that returns 0 for front camera if (cameraId < 0) { } else { try { camera = Camera.open(cameraId);//opens front cam // camera = Camera.open(); when I use this I can on/off the flashlight,since I am calling the back camera. params = camera.getParameters(); Log.e("Cam","camera id" + cameraId); Log.e("Cam","params" + params); } catch (Exception e) { e.printStackTrace(); } try { mPreview = new CameraPreview(getApplicationContext(), camera); preview = (FrameLayout) findViewById(R.id.camera_preview); preview.addView(mPreview); } catch (Exception e) { e.printStackTrace(); } } } } catch (Exception e3) { e3.printStackTrace(); } } private void turnOnFlash() { Log.v("Cam","Inside turnOnFlash"); if (!isFlashOn) { if (camera == null || params == null) { Log.v("Cam","camera or param is null"); return; } params.setFlashMode(Parameters.FLASH_MODE_TORCH); camera.setParameters(params); camera.startPreview(); isFlashOn = true; // changing button/switch image toggleButtonImage(); } } /* * Turning Off flash */ private void turnOffFlash() { Log.v("Cam","Inside turnOffFlash"); if (isFlashOn) { if (camera == null || params == null) { Log.v("Cam","camera or param is null"); return; } params.setFlashMode(Parameters.FLASH_MODE_OFF); camera.setParameters(params); camera.stopPreview(); isFlashOn = false; // changing button/switch image toggleButtonImage(); } } private void toggleButtonImage(){ if(isFlashOn){ btnSwitch.setImageResource(R.drawable.btn_switch_on); }else{ btnSwitch.setImageResource(R.drawable.btn_switch_off); } } } 

manifest

 <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.front" /> <permission android:name="android.permission.FLASHLIGHT" /> 

How can I turn on the flashlight and the front cam at the same time? Any help would be appreciated!

+5
source share
3 answers

flashlight

  public void onToggleClicked(View view) { PackageManager pm = context.getPackageManager(); final Parameters p = camera.getParameters(); if (isFlashSupported(pm)) { boolean on = ((ToggleButton) view).isChecked(); if (on) { Log.i("info", "torch is turn on!"); p.setFlashMode(Parameters.FLASH_MODE_TORCH); camera.setParameters(p); camera.startPreview(); } else { Log.i("info", "torch is turn off!"); p.setFlashMode(Parameters.FLASH_MODE_OFF); camera.setParameters(p); camera.stopPreview(); } 

Camera:

  ImageButton ib = (ImageButton) findViewById(R.id.buttonToast); ib.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(i, CAPTURE_IMAGE_CAPTURE_CODE); } }); 
+1
source

Try turning on the flashlight in the background, then open the front camera. in fact, you can rotate the front camera and flashlight in the background.

Here's how to open a flashlight in the background: this

Here's how to turn on the camera in the background: this

+1
source

The following code checks for a front camera:

 private Camera openFrontFacingCameraGingerbread() { int cameraCount = 0; Camera cam = null; Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); cameraCount = Camera.getNumberOfCameras(); for (int camIdx = 0; camIdx < cameraCount; camIdx++) { Camera.getCameraInfo(camIdx, cameraInfo); if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { try { cam = Camera.open(camIdx); } catch (RuntimeException e) { Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage()); } } } return cam; } 

Then add the following permissions to the AndroidManifest.xml file:

 <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.front" android:required="false" /> 

Note. This feature is available in Gingerbread (2.3) and Up Android Version.

I recommend using surfaceView, for example, in this , to implement a working flashlight.

Hope this helps :)

0
source

Source: https://habr.com/ru/post/1204042/


All Articles