使用内置的Camera应用程序捕获图像(1)

随着移动电话迅速成为移动计算机,它们在许多方面已经取代了各种各样的消费类电子产品。最早添加到移动电话上且和电话无关的硬件功能之一是摄像头。现在,似乎很难想象有人会购买一部不包含摄像头功能的移动电话。当然,基于Android的电话也不例外;从一开始,Android SDK就支持访问电话内置的硬件摄像头来捕获图像。

在Android上,完成许多事情的最便捷方式是通过使用意图(intent)来利用该设备上的某个现有软件。意图是Android的核心组件,在文档中将它解释为一个“将要执行的操作的描述”。在实践中,意图用于触发其他应用程序来完成某件事情,或者在单个应用程序的活动之间进行切换。

所有带有合适硬件(摄像头)的原版Android设备都会附带Camera应用程序。Camera应用程序包含一个意图过滤器(intent filter),它使得开发人员能够提供与Camera应用程序同等的图像捕获能力,而不必构建他们自己的定制捕获例程。

意图过滤器是程序员用于指定其应用程序能够提供某个特定功能的一种方法。在应用程序的AndroidManifest.xml 文件中指定一个意图过滤器,将会告诉Android,这个应用程序(尤其是包含意图过滤器的活动)将根据指令执行指定的任务。

Camera应用程序在其清单文件中指定了以下意图过滤器。这里显示的意图过滤器包含在“Camera”活动标记内。

<intent-filter> 

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

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

</intent-filter>

为了通过一个意图利用Camera应用程序,我们所要做的仅仅是必须构造一个将由上述过滤器捕获的意图。

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

在实践中,我们可能不希望直接使用动作字符串创建意图。在这种情况下,可以指定MediaStore类中的常量ACTION_IMAGE_CAPTURE。应该使用常量而非字符串本身的原因在于,如果该字符串发生了改变(当然常量也可能会不断地改变),那么使用常量将使得我们的调用比之前使用字符串更有利于未来的变化。

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

startActivity(i);

读书导航