正文

圖像存儲(chǔ)和元數(shù)據(jù)(10)

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


與前面的示例一樣,當(dāng)Camera應(yīng)用程序返回時(shí)觸發(fā)onActivityResult 方法。將新創(chuàng)建的圖像解碼成Bitmap形式并顯示。在此版本中,對(duì)相關(guān)的用戶界面元素也進(jìn)行了管理。

1.2.3  使用MediaStore檢索圖像

為了說(shuō)明在Android 上使用共享內(nèi)容提供器的能力,一個(gè)示例是使用它們可以很容易地創(chuàng)建一個(gè)類似的圖像庫(kù)應(yīng)用程序。由于內(nèi)容提供器(當(dāng)前為MediaStore)在應(yīng)用程序之間共享,因此為了使得我們自己的應(yīng)用程序可以查看圖像,實(shí)際上并不需要?jiǎng)?chuàng)建一個(gè)攝像頭應(yīng)用程序并采取方法來(lái)存儲(chǔ)圖像。由于大多數(shù)應(yīng)用程序?qū)⑹褂媚J(rèn)的MediaStore,因此可以利用它來(lái)建立我們自己的圖像庫(kù)應(yīng)用程序。

從MediaStore中選擇非常簡(jiǎn)單??梢允褂糜糜趧?chuàng)建新記錄的相同Uri來(lái)從中選擇記錄。

Media.EXTERNAL_CONTENT_URI

MediaStore和所有的內(nèi)容提供器都以一種類似數(shù)據(jù)庫(kù)的方式運(yùn)作。從它們中選擇記錄,獲得一個(gè)Cursor對(duì)象,并通過(guò)它來(lái)遍歷結(jié)果。

為了實(shí)現(xiàn)選擇,首先需要?jiǎng)?chuàng)建一個(gè)想要返回的列的字符串?dāng)?shù)組。對(duì)于MediaStore中的圖像,其標(biāo)準(zhǔn)列在MediaStore.Images.Media類中表示。

String[] columns = { Media.DATA, Media._ID, Media.TITLE, Media.DISPLAY_NAME };

為了執(zhí)行實(shí)際查詢,可以使用活動(dòng)managedQuery方法。第一個(gè)參數(shù)是Uri,隨后是列名稱的數(shù)組,后跟一條限定的WHERE子句和WHERE子句的任何參數(shù),最后是一條ORDER BY子句。

以下將選擇在最近一個(gè)小時(shí)內(nèi)創(chuàng)建的記錄,并按照從最遠(yuǎn)到最近的順序?qū)λ鼈兣判颉?/p>

首先,創(chuàng)建一個(gè)稱為oneHourAgo的變量,該變量將存儲(chǔ)從1970年1月1日到一小時(shí)前所經(jīng)過(guò)的秒數(shù)。System.currentTimeMillis( )將返回相同日期以來(lái)的毫秒數(shù),所以除以1000將獲得秒數(shù)。如果減去60分×60秒,那么將獲得一個(gè)小時(shí)前的值。

long oneHourAgo = System.currentTimeMillis()/1000 - (60 * 60);

接著,將該值放入作為WHERE子句參數(shù)的字符串?dāng)?shù)組。

String[] whereValues = {""+oneHourAgo};

然后,選擇想要返回的列。

String[] columns = {Media.DATA, Media._ID, Media.TITLE, Media.DISPLAY_NAME,

Media.DATE_ADDED };


上一章目錄下一章

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