我正在開發一個android應用程序,我需要捕獲兩張圖片,一張帶前置攝像頭和另一張來自後置攝像頭。如何捕獲一個按鈕上的兩個圖片點擊 - 一個與正面和一個背面相機
下面給出了我用於此目的的代碼,當我僅用前置或後置攝像頭拍攝一張圖片時,此代碼工作正常,但當我拍攝兩張圖片(一個接一個)時,我得到java.lang.RuntimeException: Fail to connect to camera service
在camera = Camera.open(camIdx);
呼叫。
我一直在尋找這個問題的解決方案,因爲兩天,但沒有解決它。在第一張照片被捕獲後,我再次檢查到release()
camera
,以便使相機免費爲第二張照片,但沒有任何工作。
我正在使用具有Android KitKat版本(API級別19)的測試的物理設備。
那麼請告訴我的代碼是什麼問題?還是有任何替代方法來完成我的工作?
代碼:
package com.example.appdeveloper.appname;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.hardware.Camera;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import java.io.File;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
static Camera camera = null;
static int pic_number = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button)findViewById(R.id.button);
b.setOnClickListener(this);
}
@Override
public void onClick(View v) {
takeSnapShots(this,Camera.CameraInfo.CAMERA_FACING_FRONT);
takeSnapShots(this,Camera.CameraInfo.CAMERA_FACING_BACK);
}
private void takeSnapShots(Context context, int face) {
SurfaceView surface = new SurfaceView(context);
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
int cameraCount = Camera.getNumberOfCameras();
for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
if (cameraInfo.facing == face) {
camera = Camera.open(camIdx);
}
}
try {
camera.setPreviewDisplay(surface.getHolder());
}
catch (Exception e) {
e.printStackTrace();
}
camera.startPreview();
camera.takePicture(null,null,jpegCallback);
}
private static Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera1) {
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+ File.separator+"picure"+(++pic_number)+".jpg";
File pictureFile = new File(path);
if (pictureFile.exists())
pictureFile.delete();
try {
FileOutputStream outputStream = new FileOutputStream(pictureFile);
Bitmap realImage = BitmapFactory.decodeByteArray(data, 0, data.length);
Matrix mtx = new Matrix();
mtx.setRotate(90);
realImage = Bitmap.createBitmap(realImage, 0, 0, realImage.getWidth(), realImage.getHeight(), mtx, true);
realImage.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.close();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
camera.stopPreview();
camera.release();
camera = null;
}
}
};
}
嘗試添加兩個表面 一般儘量做2次。定義相機對象的2個實例和2個表面視圖,依此類推。 –
@EliasFazel我已經試過了。 – Salu