0

我试图调用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"); 
     } 
    }; 

单个捕获事件发生后,控制应返回到调用由父Preview活动PhotoCapture

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! 

没有日志标签:1或标签:2或标记:3!

因此,活动在实际图像被捕获/存储之前完成。

即使我设置(result_code =确定)图像不会保存。

我该如何解决这个问题?

+1

在完成拍照后打电话给'finish()',它将退出当前活动并退回到上一个活动。 – Apurva 2015-02-19 07:43:24

+0

@Apurva thnkx,工作! – HitchHiker 2015-02-19 07:48:51

回答

1

拨打电话finish()完成拍照后,它将退出当前活动状态,并返回上一活动状态。

+0

当相机活动返回时,它会给出'resultCode = RESULT_CANCELED'所以我无法调用下一个活动。相机是否关闭而不保存图像? – HitchHiker 2015-02-19 07:56:21

+0

@vaishnavee尝试在返回上一个活动之前设置结果代码'setResult(RESULT_OK);'。 – Apurva 2015-02-19 08:15:12

+0

图像没有存储在SD卡上的任何地方,我检查了它。所以相机正在退出W/O捕捉任何图像 – HitchHiker 2015-02-19 08:22:23

0

为了完成活动,您必须在开始活动后使用finish()方法,或者可以在开始活动之前将标志包含在intent中。

+0

感谢您的回复,请参阅我的编辑 – HitchHiker 2015-02-19 08:38:30

+0

//这应该是编辑Intent intent = new Intent(PhotoCapture.this,Preview.class); startActivityForResult(intent,CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);完(); – 2015-02-19 08:46:57

1

当您拍摄照片,并准备返回到您的电话的活动,你必须把这个代码

setResult(RESULT_OK); 

然后

finish(); 

这将返回到您的电话活动与resultCode = RESULT_OK

+0

感谢您的回复,请参阅我的编辑 – HitchHiker 2015-02-19 08:37:51

+0

调用'完成();'在'onPictureTaken' @vaishnavee – Marcus 2015-02-19 08:39:27

+0

谢谢你,工作! – HitchHiker 2015-02-19 13:29:54

相关问题