2013-01-24 97 views
1

我有一個相機項目,它可以拍照,但是當我按下圖片按鈕兩次快速崩潰。Android相機按鈕不能拍照

LogCat中的第71行是camera.takePicture(myShutterCallback,myPictureCallback_RAW,myPictureCallback_JPG);

這裏是日誌文件https://dl.dropbox.com/u/15065300/LogCat2.png

下面是代碼

public class AndroidCamera extends Activity implements SurfaceHolder.Callback{ 

Camera camera; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 
boolean previewing = false; 
LayoutInflater controlInflater = null; 

Button buttonTakePicture; 

final int RESULT_SAVEIMAGE = 0; 

    /** Called when the activity is first created. */ 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     getWindow().setFormat(PixelFormat.UNKNOWN); 
     surfaceView = (SurfaceView)findViewById(R.id.camerapreview); 
     surfaceHolder = surfaceView.getHolder(); 
     surfaceHolder.addCallback(this); 

     controlInflater = LayoutInflater.from(getBaseContext()); 
     View viewControl = controlInflater.inflate(R.layout.control, null); 
     LayoutParams layoutParamsControl 
     = new LayoutParams(LayoutParams.FILL_PARENT, 
     LayoutParams.FILL_PARENT); 
     this.addContentView(viewControl, layoutParamsControl); 


     buttonTakePicture = (Button)findViewById(R.id.takepicture); 
     buttonTakePicture.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) {  
    // TODO Auto-generated method stub 
    camera.takePicture(myShutterCallback, myPictureCallback_RAW, myPictureCallback_JPG); 
    }}); 

     LinearLayout layoutBackground = (LinearLayout)findViewById(R.id.background); 
     layoutBackground.setOnClickListener(new LinearLayout.OnClickListener(){ 


    @Override 
    public void onClick(View arg0) { 
    // TODO Auto-generated method stub 

    buttonTakePicture.setEnabled(false); 
    camera.autoFocus(myAutoFocusCallback); 
    }}); 
    } 

    AutoFocusCallback myAutoFocusCallback = new AutoFocusCallback(){ 

    @Override 
    public void onAutoFocus(boolean arg0, Camera arg1) { 
    // TODO Auto-generated method stub 
    buttonTakePicture.setEnabled(true); 
    }}; 

    ShutterCallback myShutterCallback = new ShutterCallback(){ 

    @Override 
    public void onShutter() { 
    // TODO Auto-generated method stub 

    }}; 

PictureCallback myPictureCallback_RAW = new PictureCallback(){ 

    @Override 
    public void onPictureTaken(byte[] arg0, Camera arg1) { 
    // TODO Auto-generated method stub 

    }}; 

PictureCallback myPictureCallback_JPG = new PictureCallback(){ 

    @Override 
    public void onPictureTaken(byte[] arg0, Camera arg1) { 
    // TODO Auto-generated method stub 
    /*Bitmap bitmapPicture 
    = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); */ 

    Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues()); 

    OutputStream imageFileOS; 
    try { 
    imageFileOS = getContentResolver().openOutputStream(uriTarget); 
    imageFileOS.write(arg0); 
    imageFileOS.flush(); 
    imageFileOS.close(); 

    Toast.makeText(AndroidCamera.this, 
     "Image saved", 
     Toast.LENGTH_SHORT).show(); 

    } catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

    camera.startPreview(); 
    }}; 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
    int height) { 
    // TODO Auto-generated method stub 
    if(previewing){ 
    camera.stopPreview(); 
    previewing = false; 
    } 

    if (camera != null){ 
    try { 
    camera.setPreviewDisplay(surfaceHolder); 
    camera.startPreview(); 
    previewing = true; 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    camera = Camera.open(); 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera.stopPreview(); 
    camera.release(); 
    camera = null; 
    previewing = false; 
} 
} 

在清單:

<uses-permission android:name="android.permission.CAMERA" /> 
    <uses-feature android:name="android.hardware.camera" /> 
    <uses-feature android:name="android.hardware.camera.autofocus" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

回答