正文

使用Camera類(lèi)(11)

Android多媒體開(kāi)發(fā)高級(jí)編程 作者:(美)艾佛瑞


上述的代碼片段向MediaStore中插入了一條新記錄,并返回一個(gè)URI。然后,利用這個(gè)URI可以獲得一個(gè)OutputStream,用于寫(xiě)入JPEG數(shù)據(jù)。這將在MediaStore指定的位置中創(chuàng)建一個(gè)文件,并將它鏈接到新的記錄。

如果后面想要更新存儲(chǔ)在MediaStore記錄中的元數(shù)據(jù),那么如同第1章所描述的一樣,可以利用一個(gè)新的ContentValues對(duì)象對(duì)記錄進(jìn)行更新。

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);

最后,必須實(shí)際調(diào)用Camera.takePicture。為此,需要設(shè)置預(yù)覽屏幕為“可單擊(clickable)”,同時(shí)在onClick方法中完成照相。

在活動(dòng)中將實(shí)現(xiàn)一個(gè)OnClickListener,并設(shè)置SurfaceView的onClickListener為活動(dòng)本身。然后,使用setClickable(true)設(shè)置SurfaceView為“可單擊”。另外,需要設(shè)置SurfaceView為“可聚焦(focusable)”。默認(rèn)情況下SurfaceView不可聚焦,因此必須使用setFocusable(true)對(duì)它進(jìn)行顯式的設(shè)置。同樣,當(dāng)處于“觸摸模式”時(shí),通常會(huì)禁用焦點(diǎn),所以必須使用setFocusInTouchMode(true)對(duì)其進(jìn)行顯式的設(shè)置,使這種情況不會(huì)發(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);

  }


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) www.talentonion.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)