使用Camera类(11)

上述的代码片段向MediaStore中插入了一条新记录,并返回一个URI。然后,利用这个URI可以获得一个OutputStream,用于写入JPEG数据。这将在MediaStore指定的位置中创建一个文件,并将它链接到新的记录。

如果后面想要更新存储在MediaStore记录中的元数据,那么如同第1章所描述的一样,可以利用一个新的ContentValues对象对记录进行更新。

ContentValues contentValues = new ContentValues(3);

contentValues.put(Media.DISPLAY_NAME, "This is a test title");

contentValues.put(Media.DESCRIPTION, "This is a test description");

getContentResolver().update(imageFileUri,contentValues,null,null);

最后,必须实际调用Camera.takePicture。为此,需要设置预览屏幕为“可单击(clickable)”,同时在onClick方法中完成照相。

在活动中将实现一个OnClickListener,并设置SurfaceView的onClickListener为活动本身。然后,使用setClickable(true)设置SurfaceView为“可单击”。另外,需要设置SurfaceView为“可聚焦(focusable)”。默认情况下SurfaceView不可聚焦,因此必须使用setFocusable(true)对它进行显式的设置。同样,当处于“触摸模式”时,通常会禁用焦点,所以必须使用setFocusInTouchMode(true)对其进行显式的设置,使这种情况不会发生。

public class SnapShot extends Activity implements OnClickListener, 

 SurfaceHolder.Callback, Camera.PictureCallback { 

...

   public void onCreate(Bundle savedInstanceState) { 

...

           cameraView.setFocusable(true);

           cameraView.setFocusableInTouchMode(true);

           cameraView.setClickable(true);

           cameraView.setOnClickListener(this);

    } 

    public void onClick(View v) { 

      camera.takePicture(null, null, null, this);

  }

读书导航