随着移动电话迅速成为移动计算机,他们在很多的方面已经取代了各种各样的消费类的电子产品。最早添加到移动电话上且与电话无关的就是硬件功能之一的是摄像头。现在,视乎很难有人想象会购买一部不包含有摄像头功能的移动电话。当然,基于Android的电话也不例外;从一开始,Android SDK 就支持访问电话内置的硬件摄像头来捕获图像。
在Android上,完成很多事情的最便捷的方式就是使用Intent来利用该设备上每个现有的软件,意图是Android的核心组件,在文档中将其解释为“将要执行的操作的描述”。在实践中,意图用于触发其他的应用程序来完成某件事情,或者在单个应用程序的活动之间进行切换。
所有带有合适硬件(摄像头)的原版Android设备都会附带Camera应用程序。Camera应用程序包含一个意图的过滤器(intent filter),使得开发人员能够提供与Camera应用程序同等的图像捕获的能力,而不必构建他们自己的定制的捕获例程。
意图过滤器是程序员用于指定其应用程序提供某个特定功能的一种方法。在应用程序的AndrioidManifest.xml文件中指定一个意图过滤器,将会告诉Android,这个应用程序(尤其是包含意图过滤器的活动)将根据指令执行指定的任务。
Camera应用程序在其清单文件中指定了一下意图过滤器。这里显示的意图过滤器包含在“Camera”活动标记内。
1 <intent-filter> 2 <action android:name="android.intent.action.MAIN" /> 3 <category android:name="android.intent.category.LAUNCHER" /> 4 </intent-filter>
为了获得一个意图利用Camera应用程序,我们所要做的仅仅是必须构造一个将由上述过滤器捕获的意图
Intent i=new Intent("android.provider.MediaStore.ACTION_IMAGE_CAPTURE");
在实践中我们可能不希望直接使用动作字符串创建意图。在这种情况下,可以指定MediaStore类中的常量ACTION_IMAGE_CAPTURE。应该使用常量而非字符串本身的原因在于,如果字符串发生了改变(当然常量也有可能不断的发生改变),那么使用常量将使得我们调用比之前使用字符串更有利于未来的变化。
1 Intent i=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 2 startActivity(i);
在一个基本的Android活动中使用这种意图,将导致默认的Camera应用程序以静止图片模式(still picture mode)启动。