我正在尝试调用camera
实例,捕获图像并返回父活动。我可以创建并调用camera
实例,捕获并存储图像,但相机的活动不会退出。
Preview
活动会创建一个相机实例,并实现onPause()
,onResume()
和resetCam()
等方法。代码是:
//capture button
buttonClick.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
camera.takePicture(shutterCallback, rawCallback, pngCallback);
}
}
protected void onResume() {
super.onResume();
int numCams = Camera.getNumberOfCameras();
if(numCams > 0){
try{
camera = Camera.open(0);
camera.startPreview();
preview.setCamera(camera);
} catch (RuntimeException ex){
Toast.makeText(ctx, getString(R.string.camera_not_found), Toast.LENGTH_LONG).show();
}
}
}
@Override
protected void onPause() {
if(camera != null) {
camera.stopPreview();
preview.setCamera(null);
camera.release();
camera = null;
}
super.onPause();
}
private void resetCam() {
camera.startPreview();
preview.setCamera(camera);
}
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
}
};
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
}
};
PictureCallback pngCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
//save the iamge here
resetCam();
Log.d(TAG, "onPictureTaken - png");
}
};
在单个捕获事件之后,控件应返回到父活动PhotoCapture
,该活动通过以下方式调用Preview
:
Intent intent = new Intent(PhotoCapture.this,Preview.class);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
并执行相同的onActivityResult()
。
如何释放camera
实例以安全退出?
我想要返回保存的图像路径。
谢谢!
修改:
我试着打电话给finish();这样:
buttonClick.setOnClickListener(new OnClickListener()
{
public void onClick(View v) {
camera.takePicture(shutterCallback, rawCallback, pngCallback);
Log.d("Tag","4");
finish();
}
});
我将Log.d()
用于获取控制流程:
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
Log.d("Tag","1");
}
};
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.d("Tag","2");
}
};
PictureCallback pngCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.d("Tag","3");
//save image
resetCam();
Log.d(TAG, "onPictureTaken - png");
}
};
日志是:
02-19 14:00:28.046 4680-4680/preview.preview D/Tag﹕ 4
02-19 14:00:38.414 4680-4686/preview.preview W/Camera﹕ Camera server died!
Tag:1或Tag:2或Tag:3没有日志!
因此,在捕获/存储实际图像之前,活动已完成。
即使我设置(result_code = OK),图像也不会被保存。
我该如何解决这个问题?
答案 0 :(得分:1)
在拍完照片后拨打finish()
,它将退出当前活动,您将返回上一个活动。
答案 1 :(得分:1)
当您拍完照片并准备好返回您的通话活动时,您必须拨打此代码
setResult(RESULT_OK);
然后
finish();
这将使用resultCode = RESULT_OK
答案 2 :(得分:0)
要完成活动,您必须在启动活动后使用finish()方法,或者在开始活动之前可以包含标记。