Android程序员指南(22)

7 使用Intents和电话拨号器

在这以前的章节一直介绍的是Android编程的基本的东西。您已经了解了Android应用程序的轮廓,并在Android服务器安装了您的第一个程序。您已学会使用Views和setContentView( ),以及如何在XML中创建用户界面。这些技能可以帮助您建立一个静态的应用程序。您尚未做过的,是使用程序界面与硬件打交道,这里的硬件就是这个平台之所以存在的目的--手机。

您不应忽略这一事实,即Android本质上是为了手机而生。Android得以运行的硬件则是设计为满足个人通信的目的。如果您拨开Android那些花哨的玩意儿,那么就会发现Android SDK能用于手机,它能够拨打及接听电话。出于这个原因,这一章着重于手机硬件交互的部分。

到了这一章的末尾,您将可以利用手机的基本功能,您可以使用拨号器来拨打和接听电话。在这个灵活的平台上,这些工具和技能,对于您创建有用的程序是非常关键的,相信这也是您阅读本书的目的就在于可以开发手机上的应用程序。

当我们提到手机,就会想到它的一些基本功能。首先,最明显的就是拨打和接听电话,这是无可争辩的本质的东西。然后,还有一些次要的功能让手机更容易使用,如保存和管理联络人的功能,以及记录和查看未接来电。当您阅读本章时,您将会访问和操作所有这些功能的代码。

您在本章中看到的第一个手机功能是打电话。您将要创建一个程序,使用一个Intent,可以控制手机拨号器并用它拨打一个号码。后续,您将扩展这个程序,增加一些其他的功能。

注:在Android平台上, dialing和calling有所不同。当您dial一个号码时,您输入数字,但是call的动作尚未发生。也就是说,dialing的过程并不包括按下Send按键。党您call一个号码时,您从手机发出了呼叫信号。即,在您输入完号码后,您按下了Send按键。您需要了解这两个动作的差别,以便理解您的应用程序的定义和范围。

6.1 Intents是什么

在您开始与电话拨号器交互以前,您需要先理解这部分的代码。Android使用Intents在程序中完成特定的动作。一旦您掌握了Intents的使用,您看到的将是一个全新的编程世界。,这一节定义了Intent的概念,以及如何使用它。

Intent是Android中在Activity之间传递信息的方法。一个Intent,简单来说,是表明了您打算做些什么的intent(意图)。您可以将Intent看作Activity间的消息。比如,假设您有一个Activity需要打开一个Web浏览器并显示一个本地页面。您的Activity就要发送一个intent,以便在Web浏览器中打开这一页,这个intent名为WEB_SEARCH_ACTION,它会被发送到Android Intent Resolver(Intent解析器)。Intent Resolver在一个Activity中检索,并选一个一个最合适的来满足您的Intent(意图),在此例是Web Browser Activity。接着Intent Resolver将您的页面传递给Web浏览器并开始运行Web Browser Activity。

Intents 可以分为两大类:

● Activity Action Intents (活动类)

用来调用特定外部Activity的。只有一个Activity可以处理Intent,比如对于Web浏览器,您需要打开Web Browser Activity来显示页面。

● Broadcast Intents(广播类)

 Intents被发送给多个Activity处理。一个例子是发送当前电池电量级别的消息,每一个Activity都可以处理这个Intent并作出适当反应,比如当电量到达指定级别时取消Activity的运行。

表7-1列出了目前可用的Activity Action Intents 。也许您已经注意到,大多数情况下,从Intent的名称可以看出它的用途是什么。

 
Android程序员指南(22)
 

 

 表7-1 Activity Action Intents

 注:对于本章的程序,您会要到表7-1中的两个Intent,CALL_ACTION和DIAL_ACTION,他们可以让您使用电话的dialing和calling功能。

 表7-2列出了目前可用的Broadcast Intents。这张表会在您建立一个receiver(接听器)时用上。


Android程序员指南(22)
 

 表7-2 Broadcast Intents

Broadcast Intents中的一些会频繁地被发送,如TIME_TICK_ACTION和SIGNAL_STRENGTH_CHANGED_ACTION。请小心使用它们。如果可能的话您应不去接收这样的broadcasts。

The Intent is only one-third of the picture。一个Intent实际上是这样,您有intent(意愿)做某事,但是一个Intent本身并不能做什么。您需要Intent Filters(过滤器)和Intent Receivers(接收器)来监听,并解释Intents。

Intent Receiver就像是Activity的信箱,它用来让Activity接受指定的Intent。如之前提到的web浏览器的例子,Web Browser Activity设置了接收web browser Intents。. 这样的系统使得不相干系的Activity可以忽略那些它们不能处理的Intent。这也使得Activity可以获得其他Activity的协作而不需要知道怎么调用它。

通过Intents和Intent Receivers,一个Activity可以发送一个Intent而另一个可以接受它。然而,这需要一些规则来规范两个Activity传递的消息类型。这就是Intent Filters的事了。

Activity使用Intent Filters 来描述Intent的类型。进一步说,他们指明了通过Intent传递的数据的类型。这样,在我们的例子中,我们希望使用web浏览器打开一个网页,Intent Filter声明了通过Intent WEB_SEARCH_ACTION传递的数据类型是一个URL的形式。在下一节,您将开始使用Intent打开并使用电话拨号器。

你可能感兴趣的:(编程,Web,android,应用服务器,浏览器)