In uno dei requisiti della mia app ho bisogno di far apparire un'attività contenente l'anteprima della fotocamera frontale, in questo stesso momento ho bisogno di accendere la torcia come well.However osservo che, sono in grado di accendere la fotocamera torcia elettrica e di nuovo, ma non fotocamera frontale e la torcia elettrica together.Following è il mio codice:Come accendere contemporaneamente torcia e fotocamera frontale in Android
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);
}
}
}
manifesto
<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" />
Come può Accendo la torcia e la parte anteriore ca m simultaneamente? Qualsiasi aiuto sarebbe apprezzato !
un'occhiata a questa risposta: http://stackoverflow.com/a/25020259/1116216 –
@MicheleLaFerla: Ecco io credo che usano 'fotocamera = Camera.open(); ', che apre di default la fotocamera posteriore. Ho bisogno di utilizzare la camma anteriore invece. Inoltre, osservo che un parametro creato utilizzando l'oggetto cam anteriore non mi aiuta a on/off la torcia elettrica – Basher51
modificato la risposta. –