Android onPictureTaken不被称为

问题描述:

我正在尝试制作一个屏幕,使用该屏幕可以拍照。这张照片将进入数据库。问题是,我尝试了多种方法,并且在每种方法中,我都需要使用PictureCallback。但是,无论如何,PictureCallback中的onPictureMethod都不会被调用。Android onPictureTaken不被称为

我已经试过看着thisthis,但还是不能动。

编辑:采用Android 2.2(API 8)

编辑的代码:

package touchcare.idealogix.android; 

//imports 

public class CameraActivityTest extends Activity implements SurfaceHolder.Callback 
{ 
private SurfaceView surfaceCamera; 
private SurfaceHolder holderCamera; 
private Camera camera; 
private Button btnCapture; 
private PictureCallback mPictureJpg; 
private PictureCallback mPictureRaw; 
private ShutterCallback shutterCallback; 

@Override public void onCreate(Bundle bundle){ 
    super.onCreate(bundle); 
    setContentView(R.layout.layout_camera); 

    Log.d("PICTURE", "ACTIVITY START"); 

    surfaceCamera = (SurfaceView) findViewById(R.id.surfaceCamera); 
    btnCapture = (Button) findViewById(R.id.btnCapture); 
    holderCamera = surfaceCamera.getHolder(); 

    holderCamera.addCallback(this); 
    holderCamera.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    shutterCallback = new ShutterCallback() 
    { 
     @Override 
     public void onShutter() 
     { 
      //DONOTHING 
     } 
    }; 

    mPictureRaw = new PictureCallback() 
    { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) 
     { 
      //DONOTHING 
     } 
    }; 

    mPictureJpg = new PictureCallback() 
    { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) 
     { 
      Log.d("PICTURE", "ON PICTURE TAKEN START"); 

      Intent intent = getIntent(); 

      final boolean beds = intent.getExtras().getBoolean(Main.BEDS, false); 
      final boolean nurse = intent.getExtras().getBoolean(Main.NURSE, false); 
      final int position = intent.getExtras().getInt(Main.POSITION, 0); 

      if(beds) 
      { 
       BedroomDataSource bedDs = new BedroomDataSource(CameraActivityTest.this); 
       String where = SQLiteBedroomHelper.COLUMN_UID + "=" + AppData.getBedrooms().get(position).getUid(); 
       bedDs.open(); 
       bedDs.updateBedroom(where, null, null, null, null, null, null, data); 
       bedDs.close(); 
       Log.d("PICTURE", "BEDS BOOLEAN"); 
       AppData.getBedrooms().get(position).setImage(data); 
      }else if(nurse) 
      { 

      } 

      Log.d("PICTURE", "ON PICTURE TAKEN END"); 

      finish(); 
     } 
    }; 

    btnCapture.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View arg0) 
     {    
      camera.takePicture(shutterCallback, mPictureRaw, mPictureJpg); 
     } 
    }); 
} 

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

    Camera.Parameters params = camera.getParameters();  

    params.setPreviewSize(holder.getSurfaceFrame().width(), holder.getSurfaceFrame().height()); 
    params.setPictureSize(32, 32); 
    params.setJpegQuality(100); 

    camera.setParameters(params); 

    try 
    { 
     camera.setPreviewDisplay(holder); 
    }catch(IOException ex){ 
     Log.d("PICTURE", "PREVIEW EXCEPTION"); 
    } 

    camera.startPreview(); 

    Log.d("PICTURE", "SURFACE CREATED"); 
} 

@Override public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 
{ 
    Log.d("PICTURE", "SURFACE CHANGED"); 
} 

@Override public void surfaceDestroyed(SurfaceHolder holder) 
{ 
    camera.stopPreview(); 

    camera.release(); 

    Log.d("PICTURE", "SURFACE DESTROYED"); 
} 
} 

感谢。

编辑:看起来像一些照片拍摄和回调达成。数据库获取照片,然后加载回位图就好了。但取决于我拍的照片,回调没有达到。更小和更简单的事情有100%的机会回调将被执行。

它看起来像你创建回调mPicture,然后从来没有把它设置为任何东西的回调。我从来没有使用任何图片的东西,所以我不能建议在哪里设置它,但据我所知,你需要注册回调它被调用,只是定义它不会对你有什么好处。

+0

我希望是这样的情况:( 它的确如此工作。在camera.takePicture行中,我实际上定义了mPicture应该被调用。感谢您的输入。 – 2012-04-24 15:04:44