2011-08-31 43 views
3

我有一个应用程序,我正在使用安卓相机拍照。我建立了自己的安卓相机。并且通过按下按钮拍摄照片。使用安卓相机拍照的问题

事情是这样的:

public void onClick(View arg0) { 
    mCamera.takePicture(null, mPictureCallback, mPictureCallback); 
    } 


Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() { 
    public void onPictureTaken(byte[] imageData, Camera c) { 

     if (imageData != null) { 
      Intent mIntent = new Intent(); 


      Bundle b = new Bundle(); 
      b.putByteArray("imageData", imageData); 
      Intent i = new Intent(mContext, ViewPhoto.class); 
      i.putExtras(b); 
      startActivity(i); 

      setResult(FOTO_MODE, mIntent); 
      finish(); 

     } 
    } 
}; 

一旦拍摄照片我使用的意图,并发送字节到另一个活动。

最大的问题是,如果我拍了几张照片,逐一通过按下按钮,我的应用程序崩溃,在这条线:

mCamera.takePicture(null, mPictureCallback, mPictureCallback); 

这是我的logcat的样子:

java.lang.RuntimeException: takePicture failed 
at android.hardware.Camera.native_takePicture(Native Method) 
at android.hardware.Camera.takePicture(Camera.java:746) 
at android.hardware.Camera.takePicture(Camera.java:710) 
at com.Xperiaproject.TakePhoto.onClick(TakePhoto.java:216) 
at android.view.View.performClick(View.java:2534) 
at android.view.View$PerformClick.run(View.java:9210) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:3701) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
at dalvik.system.NativeStart.main(Native Method) 

任何想法如何解决这个问题?

编辑:我也试着:

mCamera.takePicture(null, null, mPictureCallback); 

但崩溃后的几张照片!

!!!!!!!!这是我的全部代码: http://pastebin.com/0U1pQSak

回答

6

确保您拨打Camera.startPreview()你拍摄完照片后,再次。

8)拍照后,预览显示将停止。要拍更多照片 ,请先再次调用startPreview()。

from the Camera class documentation

+0

我已经把相机的整个代码!请你看看它! – adrian

2

this thread也有类似的问题,并设法通过只调用takePicture()之前加入System.gc()来解决它。

System.gc(); 
CameraParameters.mCamera.takePicture(null, null, jpegCallback); 
+0

WOW。这对我帮助很大。谢谢。 – kokosing

+0

这并没有帮助我,至少在我的三星Galaxy S3上 –

+0

为什么System.gc()是生产应用程序中推荐的方法? –