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

相關問題