视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于Android的移动终端应用程序开发与研究
2025-09-27 16:15:35 责编:小OO
文档
计算机与现代化

 2008年第8期

J I S UANJ I Y U X I A NDA I HUA

总第156期

文章编号:100622475(2008)0820085205

收稿日期:2008203217

作者简介:公磊(19842),男,江西南昌人,南昌大学计算机应用专业硕士研究生,研究方向:嵌入式系统;周聪(19622),男,副教授,研究方向:嵌入式系统。

基于Andr oid 的移动终端应用程序开发与研究

公 磊,周 聪

(南昌大学信息工程学院,江西南昌330031)

摘要:主要介绍了Google 新近推出的移动设备软件平台Andr oid 以及基于此平台的移动终端应用程序开发。关键词:移动设备;Andr oid;应用程序中图分类号:TP311    文献标识码:A

D evelop m en t and Research of M ob ile Term i n a ti on Appli ca ti on Ba sed on Andro i d

G ONG Lei,ZHOU Cong

(I nf or mati on Engineering School of Nanchang University,Nanchang 330031,China )

Abstract:The p ri m ary coverage is the Mobile equi pment s oft w are p latfor m of Google na med Andr oid and the devel opment ofMo 2bile ter m inati on app licati on based on Andr oid 1Key words:Mobile equi pment;Andr oid;app licati on

0 引 言

经过多年的发展,第三代数字通信(3G )技术获得了广泛的接受[1]

,它为移动终端用户带来了更快

的数据传输速率。随着3G 网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。Google 为此于2007年11月推出了一个专为移动设备设计的软件平台———Andr oid 。

Andr oid 是一套真正意义上的开放性移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Andr oid 最大特点在于它是一个开放的体系架构,具有非常好的开发和调试环境,而且还支持各种可扩展的用户体验,Andr oid 里面具有非常丰富的图形系统,对多媒体的支持功能和非常强大的浏览器[3]

Andr oid 平台的开放性等特点既能促进技术(包括平台自身)的创新,又有助于降低开发成本,还可以使运营商能非常方便地制定特色化的产品,因此,它具有很大的市场发展潜力。

1 Andro i d 软件平台的构成

[2]

Andr oid 软件平台主要由五部分构成,它们分别

是:关键应用程序、应用程序框架和组件、C /C ++函数库、Java 程序运行环境、优化了的L inux 内核。

1.关键应用程序。

Andr oid 平台内包含一些关键应用程序,如邮件

收发客户端程序、短信收发程序、日历、网页浏览器等,而更多有特色的Andr oid 应用程序还有待于广大开发者共同参与开发。

2.应用程序框架及组件。

Andr oid 应用程序开发基于框架和组件。An 2dr oid 本身已在其框架中提供了许多组件供应用程序调用,开发者也可在开发应用程序时顺带开发新的组件,并将该组件放入应用程序框架中,以供自己和其它应用程序调用。

3.C /C ++函数库。

Andr oid 应用程序框架之下是一套C /C ++函数

库,它们服务于Andr oid 应用程序组件,其功能通过组件间接提供给开发者。这些函数库包括:标准C 函数库、媒体功能库、浏览器引擎、2D 和3D 图形库及

 计 算 机 与 现 代 化2008年第8期

S QL ite引擎等。

4.Java程序运行环境。

Andr oid的Java程序运行环境包含一组Java核心函数库及Dalvik虚拟机,它们有效地优化了Java 程序的运行过程。

5.L inux内核。

Andr oid系统平台基于优化了的L inux内核,它提供诸如内存管理、进程管理、设备驱动等服务,同时也是手机软硬件的连接层。

2 Andro i d开发平台的配置和程序开 发的基本组件

  Andr oid平台为开发者提供了源码开放的软件开发包(S DK),它包含了使用Java语言开发Andr oid平台应用的必要工具和组件(AP I)。进行开发前先要建立合适的开发环境,其中基于Java的整合型可扩展平台Ecli p se是我们的首选。

2.1搭建Ecli pse开发环境[5]

Ecli p se的运行建立在JRE之上,因此必须先安装JRE。可以从htt p://java.sun.com下载JDK5或JDK6,然后按提示进行JDK的安装;安装完成后,再配置环境变量:如在W indows XP或W indows2000的操作系统中,可右键单击“我的电脑”,然后依次选择“属性”\\“高级”\\“环境变量”,在弹出的窗口的“系统变量”中找到“Path”环境变量,点击“编辑”按钮,在弹出的对话框中的“变量值”一栏输入JDK的安装路径即可,最后用同样的方法设置环境变量“Class2 path”,至此便完成了JDK的安装。

有了Java运行环境,就可以下载Ecli p se ZI P包,解压后就能直接运行Ecli p se.exe。

在Ecli p se中安装一个名为ADT的Andr oid开发工具插件,就可以使用S DK进行Andr oid应用开发。ADT安装步骤:在Ecli p se中依次选择Hel p>Soft w are Updates>Find and I nstall,在弹出的对话框中选择Search f or ne w features t o install并点击Next,选择Ne w Re mote Site,在结果对话框中为远端站点命名(如ADT),并在URL栏中输入htt p s://dl-ssl.google. com/andr oid/ecli p se/,点击ok,随后ADT站点被添加到搜寻列表中,再点击Finish即可;在搜索结果对话框中选择ADT>Ecli p se I ntegrati on>Andr oid Devel op2 ment T ools,单击Next,接受协议,点击Next和Finish;选择I nstall A ll,并重启Ecli p se,ADT安装完成。

ADT安装完毕后,还要配置Ecli p se参数,使其指向S DK根目录,过程如下:在Ecli p se中选择W indo w

>Preferences打开参数设置面板,选择Andr oid选项;在S DK路径中填入Andr oid的安装路径,单击App ly和ok,完成参数设置。至此,就能在Ecli p se环境下进行Andr oid应用的开发了。

2.2Andro i d应用程序组件的使用

Andr oid应用程序以各种组件(AP I)为基础,AP I 是Andr oid软件平台的重要组成部分,也是开发An2 dr oid应用的关键所在。下面介绍几种主要的An2 dr oid AP I。

(1)当前活动程序Activity:作为最常用的应用程序组件,几乎所有Activity都会通过创建U I窗口与用户进行交流。Activity具有生命周期,它包含运行、暂停、停止等几个状态,状态间的转换可通过调用onCreate()、on2 Start()、onRestart()、onResu me()、onFreeze()、onPause ()、onSt op()、on Dest ory()等方法来实现。要开启新的activity,可以调用start A ctivity(I ntent),或调用startSub2 Activity(I ntent,int),后者通常和on Activity Result(int, int,String,Bundle)联合使用,以从一个activity获取某结果并返回给打开它的activity。

(2)图像显示V iew:V ie w是最基本的U I构件,它在屏幕中占据一个矩形区域可用来显示文本、图像等内容,还可完成图像事件处理。常用的V ie w方法有: inflate()(由X ML文件生成V ie w)、on D ra w(Canvas) (对V ie w进行填充)、on Measure(int,int)(测量V ie w 的高度和宽度)、on Layout()(完成V ie w的布局)、on2 Key Down(int,KeyEvent)(V ie w中有按键操作时被调用)、onFocus Changed(boolean,int)(当V ie w得到或失去关注时被调用)、set O nClilckL istener()(设置V ie w 点击事件)。V ie w也包含一些子类,如:Text2 V ie w(布局文件中的文本显示)、EditText(布局文件中的文本编辑)、Butt on(按钮)、L ist V ie w(显示列表)。

(3)事件I ntent:I ntent抽象描述了想要执行的某种操作,它与start A ctivity一起使用可以开启新的ac2 tivity,与startService一起使用可以开启后台服务。

I ntent最重要的作用还是加载activity,它是不同activ2 ity间的桥梁。I ntent也可以被认为是一种概括操作行为的数据结构,它主要包括acti on(动作)和data (数据)两部分,此外它还具有一些附加属性如cate2 gory(intent种类)、type(数据类型)等。常用的I ntent 方法有intent()(构造intent)、addcategory()(添加in2 tent类型)、get A cti on()(获取intent动作)、get D ata() (获取intent数据)等。

(4)数据存取与共享机制ContentPr ovider:Cont2

 2008年第8期公磊等:基于Andr oid 的移动终端应用程序开发与研究87

 entPr ovider 可实现应用程序的数据存取及不同应用

程序间的数据共享。ContentPr ovider 为应用程序提供

一些访问方法,包括:Query (U ri,String [],String,String[],String,String,String )(数据信息的查询),insert (U ri,Contentvalues )(在Content p r ovider 中添加

新数据),updata (U ri,Contentvalues,String,String[])

(更新Connt p r ovider 中的数据),delect (U ri,String,String[])(删除数据),Gettype (U ri )(获取数据类型)。其中,U ri 标明了ContentPr ovider 存储的数据类型,在执行访问方法时都需依据U ri 作为路径标识来确定要访问哪个ContentPr ovider 。

(5)后台服务Service:Service 是运行在后台的应用程序组件,不直接与用户交互。当前活动程序可以使用Context .StartService ()开启一项后台服务,还可以通过Context .bindService ()与后台服务通信。

3 Andro i d 应用程序开发例程

电话薄是一项必不可少的手机终端应用,本文以此为例来说明基于Andr oid 应用程序开发的基本过程。

3.1项目的创建

首先,在Ecli p se 中依次选择File >Ne w >Andr oid Pr oject,在弹出的“Ne w Andr oid Pr oject ”对话框的Contents 部分选择Create ne w p r oject in works pace,在“Pr oject na me ”后输入工程名Contactnote,在“Package na me ”后输入com.google .andr oid .contactnote,在“Ac 2tivity na me ”后输入Contactlist,在“App licati on na me ”

后输入Contact,最后点击Finish,完成电话簿项目的创建。

3.2项目源程序开发

电话簿源程序主要功能模块框架如下

:

图1 电话簿功能模块框架

(1)构建数据存取和共享机制ContactnotePr o 2vider 。

ContactnotePr ovider 是电话簿的数据存储及访问

组件,作为ContentPr ovider 的子类,它必须定义一个

唯一的字符串标识U ri 来指明自身存储的数据类型。ContactnotePr ovider 的U ri 可以这样定义:public static final U ri CONTENT _UR I =U ri .parse ("content://com.google .p r ovider .Contactnote /contactnotes")。

ContentPr ovider 可使用文件存储方式或S QL ite 2Database 来存储数据。本文选用了S QL ite Database 并

借助基于S QL ite 的类S QL ite OpenHel per 来构建电话簿存储系统:

p rivate static class DatabaseHel per extends S QL ite OpenHel p 2er {

public void onCreate (S QL ite Database db ){

db .execS QL ("CRE ATE T ABLE contactnotes (_id I N TE 2GER PR I M ARY KEY,"+"peop lena me TEXT,"+"phonen 2u mber TEXT,"+"modified I N TEGER"+");");

}//创建基于S QL ite Database 的电话簿数据表格phonen 2u mbers

Andr oid 平台内置了一套S QL ite 数据存储机制,

并包含了一系列管理S QL ite Database 的相关方法,如创建、打开数据库以及执行S QL 命令等,应用程序可直接使用这些方法来构建私有存储系统,在创建ContentPr ovider 时也可以借用这些方法。上面的代码

中,ContactnotePr ovider 就使用了基于S Q lite 的ex 2

ecS QL ()方法来构建电话簿的数据存储系统。本文之所以使用ContentPr ovider 来存储数据是因为只有它能实现数据共享,而其他存储系统的访问仅限于单个应用之内。

ContactnotePr ovider 实现数据共享的前提是能被

所有应用程序访问,因此它提供了一些公开的访问接口,应用程序调用这些访问接口时用U ri 标识确定访问路径。U ri 有两种形式,一种对应的是ContentPr o 2vider 中的所有数据内容,另一种对应了具体的某条(行)数据。以ContactnotePr ovider 为例,com.google .p r ovider .Contactnote /contactnotes 代表整个Contact 2notePr ovider 数据的访问路径,而com.google .p r ovid 2er .Contactnote /contactnotes/#则代表了具体某条(行)数据的访问路径,其中#指明行地址标号。

ContactnotePr ovider 访问接口的实现也可以借助

相关的S QL ite Database 方法,以下是实现Contact 2notePr ovider 数据更新接口的部分代码,它直接调用

了S QL ite Database 的update 方法:

public int update (U ri url,Content V alues values,String where,String[]where A rgs ){

int count;

s witch (URL_MAT CHER.match (url )){case NOTES:

 计 算 机 与 现 代 化2008年第8期

count=mDB.update("notes

break;...

调用时只需通过U ri M atcher.match(uri)将数据更新接口U ri类型的路径参数解析为S QL ite Database 方法能识别的数据库表格形式。

(2)Activity程序的创建与编辑。

当前活动程序Activity通常可实现应用程序与用户的交互,本实例包含两个当前活动程序:电话本列表显示程序Contactlist和电话本编辑程序Contacte2 dit。

Contactlist是电话簿应用程序的入口,程序加载时将它开启。打开电话簿后首先看到的是按某种布局显示的联系人列表,列表内容和后台数据相对应。如果并未向后台数据库中添加任何信息,则列表显示内容为空,但列表的构架仍然存在。下面的代码部分实现了后台数据与列表内容显示的映射:

p r otected void onCreate(Bundle icicle){

super.onCreate(icicle);

...

mCurs or=managed Query(getI ntent().get D ata(),PRO2 JECTI O N,null,null);

L ist A dap ter adap ter=ne w Si m p leCurs or Adap ter(this,R. layout.contactlist_item,mCurs or,ne w String[]{Contactnote. contactnotes.PEP OP LE NAM E},ne w int[]{andr oid.R.id. text1});

set L ist A dap ter(adap ter);

}

首先通过managedQuery(getI ntent().get D ata (),PROJECTI O N,null,null)来获取指向后台数据的指针mCurs or,getI ntent().get D ata()和PROJEC2 TI O N共同决定了哪部分后台数据将被显示;然后,使用Si m p leCurs or Adap ter()来定义后台数据到前台显示的映射方式,其中R.layout.contactlist_ite m定义了列表的布局,Contactnote.contactnotes.PE OP LE NAME 指明显示内容为联系人姓名,andr oid.R.id.text指明姓名显示为文本;最后,通过set L ist A dap ter(adap ter)来激活映射。

光有列表显示还不足以实现Contactlist与用户的交流,真正的交互是通过创建可选菜单来完成的,而每个菜单选项都对应于用户的某种操作。Con2 tactlist使用onCreate Op ti ons Menu()来创建菜单: public boolean onCreate Op ti ons Menu(M enu menu){

super.onCreateOp ti ons Menu(menu);

menu.add(0,I N SERT_I D,R.string.menu_insert).set2Shortcut(’3’,’a’);

I ntent intent=ne w I ntent(null,getI ntent().get D ata());

intent.addCategory(I ntent.ALTERNATI V E_C ATEG ORY);

menu.add I ntent O p ti ons(Menu.ALTERNATI V E,0,new Component N a me(this,Contact L ist.class),null,intent,0, null);

return true;

}

可选菜单中,“添加”菜单项I nsert是被静态创建的,不管显示内容是否为空,该菜单项都存在。而对于那些在显示内容非空时才有意义的菜单项,可以用方法menu.add I ntent O p ti ons()来创建,这是一种动态创建方式,它创建的菜单项对应了某种事件intent。使用前先用intent.addCategory(I ntent.ALTERNA2 TI V E_CATEG ORY)将intent的类型设为ALTERNA2 TI V E_CATEG ORY或SELECT_ALTERNATI V E_CAT2 EG ORY,以表明这些intent及其对应的acti on是可以变化的。

电话簿程序应该具备响应内外事件的能力,如电话拔打程序或短信发送程序向电话簿索取号码时引发的事件。Contactlist必须先获取事件的acti on和data,然后依据acti on进行分类处理。acti on包括V I E W_ACTI O N(向用户显示数据)、MA I N_ACTI O N (开启入口程序)、E D I T_ACTI O N(提供编辑入口)、P I CK_ACTI O N(获取数据并返回)等不同类型。假如短信发送程序想从电话簿中获取号码,那么它会发出一个acti on类型为P I CK_ACTI O N的intent,Con2 tactlist接收并确认后执行set Result(RES ULT_OK, url.t oString()将号码返回。如果是程序内部菜单触发的编辑事件,那么Contactlist会使用start A ctivity (ne w I ntent(I ntent.ED I T_ACTI O N,uri))开启Con2 tactedit完成编辑工作。

Contactedit是电话簿中另一个交互程序,由Con2 tactlist的添加或编辑事件引发,它为用户提供了联系人姓名和号码编辑窗口,用户完成编辑并确认后, Contactedit调用ContactnotePr ovider的insert()或up2 data()方法将用户输入的值保存到电话簿数据库中去,然后返回Contactlist,这时Contactlist显示的是更新后内容。

3.3代码的运行

完成工程的创建和源代码的编辑后就开始运行程序。在Ecli p se平台中选择Run>Open Run D ial og 选项,打开运行对话框。然后,在对话框左边的type filter text下选择Andr oid App licati on>contactnote,再

 2008年第8期公磊等:基于Andr oid 的移动终端应用程序开发与研究

 点击对话框中的Run 按钮,应用程序就会被加载到

仿真器上并开始运行(如图2)

。图2 电话簿程序仿真运行

4 结束语

Andr oid 手机应用程序开发需要着眼于它的整个

体系构架,是一项复杂的工程。本文分析了Andr oid

体系的层次架构,并在此基础上介绍了Andr oid 应用程序开发的相关技术和基本的开发流程。Andr oid 平

台具有极大的开放性和兼容性,相信广大开发者可以借助Andr oid S DK 提供的强大技术支持,开发出丰富多彩、极具个性的移动应用。

参考文献:

[1] 3G 继续稳步快行[J ].中国电信业,2007(2):50251.[2] Code Home .Andr oid 2An Open Handset A lliance Pr oject

[E B /OL ].http://code .google .com /andr oid /what 2is 2an 2dr oid .ht m l,2008201201.

[3] 邸烁.Andr oid 揭秘和未来发展趋势[E B /OL ].http://

publish .it pub .net/zt/andr oid /index .ht m l,2008203217.[4] 百度空间.Google Andr oid 里头到底有什么?[E B /OL ].

http://hi .baidu .com /luj w c81/bl og/ite m /12777c0754bc b8c97b47c3.ht m l,2008201228.

[5] 叶达峰.Ecli p se 编程技术与实例[M ].北京:人民邮电

出版社,2006.

[6] 张超,王阿川,王智.基于J2ME 和J2EE 的手机软件的

研究[J ].黑龙江科技信息,2007(3):21,201.

[7] 扣锁.短信息在嵌入式L inux 系统中的设计与实现

[D ].东南大学硕士学位论文,2005.

[8] 刘向辉.基于Java 的移动终端中间件的研究与设计

[D ].华东师范大学硕士学位论文,2005.

[9] 高博.基于J2ME 的移动通信技术的研究与应用[D ].

沈阳工业大学硕士学位论文,2006.

(上接第84页)

Login Bean .cl oseSt m t ();//关闭St m t 对象Login Bean .cl oseConn ();//关闭Conn 对象

//使用sessi on 对象的put V alue ()方法,把用户名name1

赋给变量userna me

sessi on .put V alue ("userna me

//如果登录成功,使用javascri p t 语句直接进入index_ok .js p 文件中

window .l ocati on ="index_ok .js p?mark =成功登录"<%}

//如果有错,则输出提示信息“用户名或者密码错误!”else {

rs .cl ose ();

Login Bean .cl oseSt m t ();Login Bean .cl oseConn ();%>

alert ("用户或者密码错误!");

}

5 结束语

随着W eb 技术的发展,人们生活水平的提高,人们生活方式也发生了巨大的改变。网上购物的出现使人们可以足不出户,看遍世界,消费者可以用自我服务的方式来完成交易,而企业通过网站可以展示产品,与用户进行交流沟通,从而吸引顾客,扩大客户群。网上购物将对社会的生产和管理、人们的生活方式、法律制度和教育文化带来巨大的影响。

参考文献:

[1] 杨学瑜,王志军,刘同利.JSP 入门与提高[M ].北京:清

华大学出版社,2004.

[2] 刘荣华,张扬,聂颂,等.O racle 数据库管理与应用系统

开发[M ].北京:人民邮电出版社,2005.

[3] 鲁晓东,李育龙,杨健.JSP 软件工程案例精解[M ].北

京:电子工业出版社,2005.

[4] 豆腐.JSP,ASP +,ASP,PHP 运行速度测试报告[E B /

OL ].http://www .itlearner .com /A rticle /2006/3038.sht 2m l,2006205205.下载本文

显示全文
专题