正文

使用內(nèi)置的Camera應(yīng)用程序捕獲圖像(1)

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


隨著移動電話迅速成為移動計算機(jī),它們在許多方面已經(jīng)取代了各種各樣的消費類電子產(chǎn)品。最早添加到移動電話上且和電話無關(guān)的硬件功能之一是攝像頭?,F(xiàn)在,似乎很難想象有人會購買一部不包含攝像頭功能的移動電話。當(dāng)然,基于Android的電話也不例外;從一開始,Android SDK就支持訪問電話內(nèi)置的硬件攝像頭來捕獲圖像。

在Android上,完成許多事情的最便捷方式是通過使用意圖(intent)來利用該設(shè)備上的某個現(xiàn)有軟件。意圖是Android的核心組件,在文檔中將它解釋為一個“將要執(zhí)行的操作的描述”。在實踐中,意圖用于觸發(fā)其他應(yīng)用程序來完成某件事情,或者在單個應(yīng)用程序的活動之間進(jìn)行切換。

所有帶有合適硬件(攝像頭)的原版Android設(shè)備都會附帶Camera應(yīng)用程序。Camera應(yīng)用程序包含一個意圖過濾器(intent filter),它使得開發(fā)人員能夠提供與Camera應(yīng)用程序同等的圖像捕獲能力,而不必構(gòu)建他們自己的定制捕獲例程。

意圖過濾器是程序員用于指定其應(yīng)用程序能夠提供某個特定功能的一種方法。在應(yīng)用程序的AndroidManifest.xml 文件中指定一個意圖過濾器,將會告訴Android,這個應(yīng)用程序(尤其是包含意圖過濾器的活動)將根據(jù)指令執(zhí)行指定的任務(wù)。

Camera應(yīng)用程序在其清單文件中指定了以下意圖過濾器。這里顯示的意圖過濾器包含在“Camera”活動標(biāo)記內(nèi)。

<intent-filter> 

<action android:name="android.media.action.IMAGE_CAPTURE"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

為了通過一個意圖利用Camera應(yīng)用程序,我們所要做的僅僅是必須構(gòu)造一個將由上述過濾器捕獲的意圖。

Intent i = new Intent("android.media.action.IMAGE_CAPTURE");

在實踐中,我們可能不希望直接使用動作字符串創(chuàng)建意圖。在這種情況下,可以指定MediaStore類中的常量ACTION_IMAGE_CAPTURE。應(yīng)該使用常量而非字符串本身的原因在于,如果該字符串發(fā)生了改變(當(dāng)然常量也可能會不斷地改變),那么使用常量將使得我們的調(diào)用比之前使用字符串更有利于未來的變化。

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

startActivity(i);


上一章目錄下一章

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