正文

圖像存儲和元數(shù)據(jù)(1)

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


為了獲得存儲圖像的標(biāo)準(zhǔn)位置,首先需要獲取MediaStore的引用。為此,使用一個內(nèi)容解析器。內(nèi)容解析器是用于訪問內(nèi)容提供器(例如MediaStore)的方法。

通過傳遞一個特定的Uri,內(nèi)容解析器將提供一個MediaStore接口作為內(nèi)容提供器。由于是插入一幅新圖像,因此我們使用的方法是insert,并且應(yīng)該使用的Uri將包含在android. provider.MediaStore.Images.Media類的常量EXTERNAL_CONTENT_URI中。這意味著我們想要將圖像存儲在設(shè)備的主要外部存儲器上(一般是SD卡)。反之,如果想要將它存儲在設(shè)備的內(nèi)存中,那么可以使用INTERNAL_CONTENT_URI。然而,對于存儲如圖像、音頻、視頻等大小可能會相當(dāng)大的媒體,通常需要使用EXTERNAL_CONTENT_URI。

前面顯示的插入調(diào)用返回一個Uri,可以利用它來寫入圖像文件的二進(jìn)制數(shù)據(jù)。在當(dāng)前情況下,由于正處于CameraActivity中,因此我們希望簡單地將它作為觸發(fā)Camera應(yīng)用程序的意圖中的一個附加值來傳遞。

Uri imageFileUri = getContentResolver().insert(

Media.EXTERNAL_CONTENT_URI, new ContentValues());

Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);

startActivityForResult(i, CAMERA_RESULT);

您將注意到我們也傳入一個新的ContentValues對象。該ContentValues對象是我們希望在記錄創(chuàng)建時與它相關(guān)聯(lián)的元數(shù)據(jù)。前面的示例則是傳入一個空的ContentValues對象。

1. 預(yù)填充關(guān)聯(lián)元數(shù)據(jù)

如果想要預(yù)填充元數(shù)據(jù),那么可以使用put方法為它添加一些數(shù)據(jù)。ContentValues的數(shù)據(jù)形式是名-值對。其中,名稱是標(biāo)準(zhǔn)的,定義為android.provider. MediaStore.Images.Media類中的常量(一些常量實際上位于android.provider.MediaStore. MediaColumns接口中,由Media 類實現(xiàn)該接口)。

// 在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");

contentValues.put(Media.MIME_TYPE, "image/jpeg");

// 添加一條新的記錄,沒有指定位圖,但設(shè)置了一些值

// insert()返回新記錄的Uri

Uri imageFileUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI,

contentValues);

同樣,這個調(diào)用返回的是一個Uri,可以通過意圖將它傳遞給Camera應(yīng)用程序,以指定該圖像應(yīng)該保存的位置。

如果通過Log命令輸出這個Uri,那么它看起來應(yīng)該如下所示:


上一章目錄下一章

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