捕获单张图像并返回父级后释放相机实例activity
Releasing camera instance after a single image is captured and returning to parent activity
我正在尝试调用 camera
实例,捕获图像并 return 到父 activity。我能够创建和调用 camera
实例,捕获并存储图像,但是带有相机的 activity 不会退出。
Preview
activity 创建相机实例并实现 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");
}
};
在单个捕获事件之后,控件应该 returned 到父 activity PhotoCapture
,它通过以下方式调用 Preview
:
Intent intent = new Intent(PhotoCapture.this,Preview.class);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
并执行相同的 onActivityResult()
。
我应该如何释放 camera
实例以安全退出?
我也想return图片保存的路径
谢谢!
编辑:
我试着调用 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 或标记:2 或标记:3 没有日志!
因此 activity 在实际图像 captured/stored 之前完成。
即使我设置了(result_code=OK)图像也没有保存。
我该如何解决这个问题?
拍完照片后调用 finish()
,它将退出当前 activity,您将返回到之前的 activity。
要完成 activity,您必须在开始 activity 之后使用 finish() 方法,或者您可以在开始 activity.
之前将标志包含到意图中
当您拍照并准备好 return 拨打电话 activity 时,您必须拨打此代码
setResult(RESULT_OK);
然后
finish();
这将 return 以 resultCode = RESULT_OK
呼叫 activity
我正在尝试调用 camera
实例,捕获图像并 return 到父 activity。我能够创建和调用 camera
实例,捕获并存储图像,但是带有相机的 activity 不会退出。
Preview
activity 创建相机实例并实现 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");
}
};
在单个捕获事件之后,控件应该 returned 到父 activity PhotoCapture
,它通过以下方式调用 Preview
:
Intent intent = new Intent(PhotoCapture.this,Preview.class);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
并执行相同的 onActivityResult()
。
我应该如何释放 camera
实例以安全退出?
我也想return图片保存的路径
谢谢!
编辑:
我试着调用 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 或标记:2 或标记:3 没有日志!
因此 activity 在实际图像 captured/stored 之前完成。
即使我设置了(result_code=OK)图像也没有保存。
我该如何解决这个问题?
拍完照片后调用 finish()
,它将退出当前 activity,您将返回到之前的 activity。
要完成 activity,您必须在开始 activity 之后使用 finish() 方法,或者您可以在开始 activity.
之前将标志包含到意图中当您拍照并准备好 return 拨打电话 activity 时,您必须拨打此代码
setResult(RESULT_OK);
然后
finish();
这将 return 以 resultCode = RESULT_OK