Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20610
  • 博文数量: 27
  • 博客积分: 665
  • 博客等级: 上士
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-28 10:34
文章分类
文章存档

2011年(27)

我的朋友
最近访客

分类: 嵌入式

2011-04-29 09:00:24

在初见 Intent 一章中,我们已尝试过使用 "startActivity" 函数,传入适当的 "Intent" ,来呼叫浏
览器的 Activity 。
到目前为止,我们可以由学习 Android 应用程序的经验中归纳得出:所有 Android 程序的运作流程,都
定义在 Activity 中。
Android 系统与其他系统很不一样的地方是:它的应用程序并不直接与底层系统紧密结合,而是跑在
Android 框架中。这意思是设计 Android 应用程序时,我们并不需要关心实际上运作的机器是哪一牌的
手机或是哪一种嵌入式系统,或使用哪一种架构 (ARM 、 x86 、 MIPS) 。我们要关心的只有 Android
框架提供了那些功能,好让我们能操作这台设备。具体来说就是我们只要知道这台机器的萤幕大小、有没
有键盘,有没有支援 GPS 等等讯息,就知道我们写的应用程序是否能在这台机器上顺畅地运作。
Android 框架与底层系统的整合的问题完全可以留给轫体工程师来操心。
在 执行 "startActivity" 函数时,应用程序并不是直接呼叫另一个 Activity ,而是将 "Intent"( 意
图 ) 传进 Android 框架中。 Android 框架会查看 "startActivity" 呼叫所传入的动作与 Intent 内容
是否在注册表中,如果符合,就启动对应的服务或 Activity 。
Android 系统中的每一个应用程序,在安装的过程里,都得事先在 Android 框架中注册、登记这个应用
程序所建立的 Activity ,并事先注明会使用到的服务。譬如当我们在 Android 上安装我们撰写的 BMI
应用程序时, BMI 应用程序就会向 Android 框架登记相关资讯: BMI 应用程序将会用到 "Bmi" 这个
Activity 。
这份讯息存在于每个 Android 应用程序专桉根目录下的 "AndroidManifest.xml" 档桉中。如果我们在程
序里,要用到其他应用程序或服务所提供的功能,也需一併在此列出。
在安装应用程序的时候, Android 框架会根据应用程序提供的这份清单,将资讯注册于 Android 框架的
注册表中。
备注 :
这麽说其实是不太精确的。 Android 应用程序的运作流程,存在于四种载体中:
1. Activity ( 活动 )
2. Broadcast Intent Receiver
3. Service
4. Content Provider
各种载体的相关内容会在后续章节提到时作解说。
预设的 Activity 清单
 
我们使用 eclipse Android 开发工具打开 "BMI/AndroidManifest.xml" 档桉。切换到
"AndroidManifest.xml" 分页标签,查看预设的 "BMI/AndroidManifest.xml" 档桉源代码:
代码 :
3      package="com.demo.android.bmi"
4      android:versionCode="1"
5      android:versionName="1.0">
6     
7         
8             
9                 
10                
11           
12         
13    
14    
15
 
我们分行讲解如下:
代码 :
....>
    ....
 
"AndroidManifest.xml" 这个档桉也是以 XML 格式描述,每个 Android 应用程序都需要一个
"AndroidManifest.xml" 档桉,每份 "AndroidManifest.xml" 档桉的开头都会出现这段叙述。而整 个
"AndroidManifest.xml" 档桉的叙述,都包含在 "manifest"( 清单 ) 这个主要标签中。
代码 :
package="com.demo.android.bmi"
 
"package" 是 "manifest"( 清单 ) 标签的一个特别属性,范例中的内容可用来标明,这个应用程序的进
入点存在于 "com.demo.android.bmi" 这个名称空间 / 路径中。
代码 :
android:versionCode="1"
android:versionName="1.0"
 
"android:versionCode" 和 "android:versionName" 是应用程序版本号。 这两个属性是可选的 ( 非必
要 ) 。 "android:versionName" 是给使用者看的版本号, 如 "1.0" 、 "2.0" 。
"android:versionCode" 则是开发者用的内部版本号,一般使用流水号。
代码 :
..
"manifest" 标签中主要包含一个 "application" 标签 ( 备注 1) 。 "application" 标签里面,定义了
所有这个应用程序用到的 Activity 、服务等资讯。 "application" 标签中的 "android:icon" 属性,
定义了这个应用程序将显示在 Android 主画面中的应用程序图示。
表示应用程序图示的资源档存在于 "res/drawable /icon" 中。
图示的大小必须超过 64x64 像素( Pixel )。 "application" 标签中的 "android:label" 属性可用来
指定应用程序将显示在 Home 主画面上的名称。也就是预设刚开好机时,可以从桌面下方拉出的应用程序
列表。
代码 :
...
"application" 标签中所有用到的 Activity ,都要包含在一个个 "activity" 标签中 ( 备注 2) 。
Activity 是 Android 应用程序与使用者互动的主要元素,当使用者开启一个应用程序,第一个看到的画
面就是一个 Activity 。若是一个应用程序中包含多个画面时,会定义多个不同的 Activity ,我们也必
须在 "application" 标签中,使用多个 "activity" 标签,为不同的 Activity 添加描述。如果我们已
经在程序码中定义好了 Activity ,却忘了在 "AndroidManifest.xml" 档桉中加入对应的 "activity"
标签,那麽在执行中呼叫到这个 Activity 的时候,将无法开启这个 Activity 。
"activity" 标签的 "android:name" 属性,指出了这个 Activity 所对应的类别 (class) 。
"activity" 标签中的 "android:label" 属性可用来指定应用程序将显示在 Activity 画面上方的名称。
也可以在程序码中透过 "setTitle(“ 名称 ”)" 来动态修改。
因为在上一 层 "Manifest" 标签属性中已经定义了 "package="com.demo.android.bmi"" ,因此在
"activity" 标签 的 "android:name" 属性中, ".Bmi" 代表着 "com.demo.android.bmi.Bmi" 的简写。
也可以写成 "Bmi" ,一样是 代表 "com.demo.android.bmi.Bmi" 这个类别。
代码 :
   
   
/intent-filter>
"intent- filter" 标签定义了这个 "activity" 的性质。 "intent-filter" 中主要包含了两个标签:
"action" 跟 "category" 标签。 "action" 标签中的 "android:name" 属性,其内容
"android.intent.action.MAIN" 表示:这个 Activity 是此应用程序的进入点(就像程序中常见的 main
主程序),开启这个应用程序时,应先执行这个 Activity 。。常见的还有
"android.intent.action.EDIT" 等标签,会在之后章节用上的时候讲解。 "category" 标 签中的
"android:name" 属性,其内容 "android.intent.category.LAUNCHER" 表示:这个 Activity 将显示在
Launcher 的应用程序列表中。
我们把整个档桉合到一起看,可以总结出这个档桉所传达的讯息: 在 "com.demo.android.bmi" 路径下
的 "Bmi.java" 这个档桉中,已定义了一个主要的 Activity; 当我们打开 Android 的时候,显示的是位
于 "res/drawable/icon" 的图示。一旦我们按下图示来启动这个应用程序, Android 应用程序框架会去
寻找到定义了 "android.intent.action.MAIN" 内容的 ".Bmi"activity ,并呼叫执行。
代码 :
Android SDK 1.1 版之后引入了这条叙述。透过指定这个参数,系统可以依此辨别应用程序是否使用相容
的 SDK 版本,好决定能否在这台机器上安装执行。 "1" 代表 Android SDK 1.0 , "2" 代表 SDK 1.1
, "3" 代表 SDK 1.5 。这也是一个可选填的选项。但如果我们的应用程序要发佈出去,一些强势的通路
如 Google Android Market 已规定所有新发佈的应用程序必须指定 "android:minSdkVersion" 这个参数

备注 1
除了 "application" 标签外,还有 "uses-permission"( 例如允不允许存取 SMS 、能否存取联络簿、相
机功能 ) 、 "permission" 、 "instrumentation" 等主要标签。相关的内容在后续章节用到时再一併解
说。
备注 2
除了 "activity" 标签外,对应于 Android 应用程序的运作流程,还有 "service" 、 "receiver" 、
"provider" 等主要元件。相关内容会在后续章节提到时作解说。
 
培训 尽在亚嵌
阅读(319) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~