我想以最小的间隔或(如果可能的话)同时制作两个相机。我尝试在服务上实现它,但同步有很多问题。现在我有两个服务,通过前置和后置摄像头拍照。
也许现在有人,如何在一项服务中使用两个摄像头?
public int onStartCommand(Intent intent, int flags, int startId) {
frontCamera = getCameraInstance(1);
SurfaceTexture surfaceTexture = new SurfaceTexture(0);
try {
frontCamera.setPreviewTexture(surfaceTexture);
frontParameters = frontCamera.getParameters();
frontCamera.startPreview();
frontCamera.takePicture(null, null, frontCameraCall);
surfaceTexture.release();
} catch (IOException e) {
appendToFile(log, "Front camera service preview exception message: " + e + "\n");
e.printStackTrace();
}
return START_REDELIVER_INTENT;
}
protected Camera getCameraInstance(int cameraId){
Camera c = null;
try {
do{
c = Camera.open(cameraId); // atte
mpt to get a Camera instance
}while (c == null);
}catch (Exception e){
// Camera is not available (in use or does not exist)
Log.e("myLogs", "Camera " + cameraId + " not available! " + e.toString());
}
return c; // returns null if camera is unavailable
}
Camera.PictureCallback frontCameraCall = new Camera.PictureCallback() {
public void onPictureTaken(final byte[] data, Camera camera) {
if (null != camera){
camera.stopPreview();
camera.release();
camera = null;
}
FileOutputStream outStream = null;
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm");
String fileName = "Front" + currentDate + "-" + countFormatter(counter) + ".jpg";
File photo = new File(Environment.getExternalStorageDirectory() + "/UAV/front", fileName);
if (!photo.getParentFile().exists()) {
photo.getParentFile().mkdirs();
}
outStream = new FileOutputStream(photo);
outStream.write(data);
outStream.close();
camkapa(frontCamera);
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
};
protected void camkapa(Camera camera) {
if (null != camera) {
camera.release();
camera = null;
}
}
第二次服务的代码相同。现在我的代码捕获错误:
W/CameraBase﹕ An error occurred while connecting to camera: 0
10-13 11:17:59.808 2493-2493/com:backService D/AndroidRuntime﹕ Shutting down VM
10-13 11:17:59.809 2493-2493/com:backService E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com:backService, PID: 2493
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.hardware.Camera.setPreviewTexture(android.graphics.SurfaceTexture)' on a null object reference