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!
source share