上述的代碼片段向MediaStore中插入了一條新記錄,并返回一個URI。然后,利用這個URI可以獲得一個OutputStream,用于寫入JPEG數(shù)據(jù)。這將在MediaStore指定的位置中創(chuàng)建一個文件,并將它鏈接到新的記錄。
如果后面想要更新存儲在MediaStore記錄中的元數(shù)據(jù),那么如同第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);
最后,必須實際調(diào)用Camera.takePicture。為此,需要設置預覽屏幕為“可單擊(clickable)”,同時在onClick方法中完成照相。
在活動中將實現(xiàn)一個OnClickListener,并設置SurfaceView的onClickListener為活動本身。然后,使用setClickable(true)設置SurfaceView為“可單擊”。另外,需要設置SurfaceView為“可聚焦(focusable)”。默認情況下SurfaceView不可聚焦,因此必須使用setFocusable(true)對它進行顯式的設置。同樣,當處于“觸摸模式”時,通常會禁用焦點,所以必須使用setFocusInTouchMode(true)對其進行顯式的設置,使這種情況不會發(fā)生。
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);
}