【Android论文栏目提醒】:网学会员在Android论文频道为大家收集整理了“基于Google+Android平台的应用程序开发与研究 - 毕业设计“提供大家参考,希望对大家有所帮助!
ISSN 1009-3044 E—mail:xsjl@ecec.net.cnComputer and Technology电囊知识与技术 http.J/www.dnzs.net.cn Teh+86-55l一5690963 5690964V01.5,No.28,October 2009,pp.7959—7962基于Google Android平台的应用程序开发与研究张仕成(同济大学软件学院。
上海201804)摘要:由Google倡导发起的开放手机联盟及其推出的Android平台,一经发布便在业内引起轩然大波。
首先介绍了
android平台中的内部结构.并通过和现有的智能手机开发平台进行比较研究分析了该平台的结构特点,以此来说明
android平台具有强大的开放性和兼容性。
然后重点介绍了该平台强大的功能之一——GoogleMap,通过开发一个利用地理定位服务束获取当前设备地理位置的应用实例。
并详细地介绍了Google Map中丰富的API功能以及应用程序的基本开发流程,来验证Android SDK提供的强大的技术支持。
关键词:Android;智能手机平台;应用程序;Google Map;Geocode中图分类号:TPl8 文献标识码:A 文章编号:l咖9—3044(加帕别贴9_旬4Development and Research of Application Based 011 Goog〕e AndroidZHANG Shi——Cheng(Software College,Tongji University,Shanghai 201 804,China)Abstract:The establishment of OHA fOpen Handset Al】jance)and the pubhcadon of Android platform by Google have caused uproar incornmunication industry.This paper fimly platform by compared with others,to explain that introduced and analysed characteristics of thisthis phfform has the formidable openness compatibility.Then it introduced出e apphcation interfaces of Google Map,and the basic and thedevelopment procedure of a apphcation,which used a location service to gain the geographical position of the current equipment,to verifythe formidable technical support which the
android sdk provides.Key words:Android;snlan phone platform;application;Googte Map;Geocode 2007年11月由Google牵头有30多家移动技术和无线应用领域领先企业组成的开放手机联盟(Open Handset Alliance)发布了其智能手机平台一一Android。
Android是一个开放、自由的移动终端平台,它是由操作系统、中间件、用户界面、应用软件组成,同时其开放性保证该平台不存在任何阻碍移动产业创新的专有权障碍。
开发人员在该平台开发的应用程序,是使用Java语言编写的、在Dalvik虚拟机上运行的。
Android的底层是以开放性的Linux kernel为其架构,也可以理解为GOosh推出的手机操作系统和相关软件的总称。
1 Android平台的架构 Android平台整体自底向上由以下四个层次组成:Linux内核层、Android运行时库和其他库层、应用框架层、应用程序层。
1)Linux内核层:Android基于Linux version2.6.23内核开发的,主要是添加了一个名为Goldfish的虚拟CPU以及Android运行所需的特定驱动代码。
该层用来提供系统的底层服务,包括安全机制、内存管理、进程管理、网络堆栈及一系列的驱动模块。
作为一虚拟的中间层,该层位于硬件与其它的软件层之间。
需要注意的是,这个内核操作系统并非类GNU/Linux的,所以其系统库、系统初始化和编程接口都和标准Linux系统有所不同的。
它没有采用虚拟内存文件系统。
而是采用YAFFS2文件系统。
YAFFS(Yet AnotherFlash F此System)件系统是一个开源的。
专门为NAND Rash设计的文件系统,具有很好的可移植性,也是一种日志型文件系统,能够在Linux,uCLimLx.和WindOWS CE上运行。
YAFFs目前有YAFFS和YAFFS2两个版本,一般来说,YAFFS对小页面(528字节/页)有很好的支持,而更大的页面(2K+64字节,页)就需要支持超大容量的NAND Flash。
所以采用支持大页面的YAFFS2文件系统。
2)Android运行时库和其他库层:Android运行时库包含一组核心库(提供了Java语言核心库内的大部分功能)和Dalvik虚拟机。
同时Android提供了丰富的库类支持且大部分为开源代码。
如采用的数据库为SQLite。
Android选择它作为移动终端的嵌入式数据库有以下优点,它元需安装和管理配置,它是一个存储在单一磁盘文件中的完整的数据库。
体积小只有250KB但支持数据库大小至2TB,提 图l Android平台的结构供了对事务功能和并发处理的支持.而且比目前流行的大多数数据库运行速度快。
3)应用框架层:在应用框架Android开发人员可以跟那些核心应用一样拥有访问框架APIs的全部权限。
应用的系结构化设计简化了各组件之间的重用,任何应用都可以分发自己的足见,任何应用也可以使用这些分发的组件(应用的使用方法需遵循框架的安全性约束)。
4)应用程序层:Android本身会附带一些核心的应用程序,包括e_mail客户端、短信程序、日历、地图、浏览器、通讯录等等,目前所有的应用程序都是由Java语言开发的。
收稿日期:2009—07—16作者简介:张仕成(1983一),男,河南信阳人.同济大学软件学院工程硕士研究生。
本栏目贯任编辑:谢媛媛 万方数据Computer knowledge and Technology电麓知识与技术 第5卷第28期(2009年10月)2 Android平台与J2ME的区别 J2ME是Java语言专门针对嵌入式电子产品开发的版本,应用在移动电话、PDA、电视机机顶盒以及其它资源受限的设备上.J2ME是目前移动设备上使用最广泛的开发平台.J2ME平台由多种配置、简表和可选包组成. 可以发现J2ME的应用是建立在ⅣM(或KVV0之上。
而主机操作系统是位于J2ME平台之外.这样的设计一方面提供r跨操作系统的特性。
主机操作系统可以是Symbi卸、Windows Mobile和Linux,另一方面J2ME虽然提供了统一的开发平台,但是JVM的安全机制让J2ME的应用程序不能调用本地系统资源.而Android向下既包括操作系统内核心,向上又拥有通现成的应用软件。
加之开源、免费、可以直接使用Java语言为开发人员提供了极大的便利。
另外需要强调的是虽然同样是使用Java语言进行开发,但是Android使用的Dalvik虚拟机和J2ME使用的标准的Java虚拟机(JVM)存在以下区别: 1)Dalvik是基于寄存器,而JVM是基于堆栈的.Android选择采用寄存器的方式是因为它对提前优化(allcad—of-time optimiza.rio,0提供了更好的支持,而这对类似于移动电话这样的受限环境是颇有裨益的.针对基于寄存器虚拟机和基于堆栈的虚拟机更深入的比较分析指出,基于寄存器的虚拟机对于更大的程序来说.在它们编译时花费的时间更短. 2)运行环境的区别.Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例.3 Android平台应用程序开发例程 开发实例是一个Android平台上地理定位应用程序,该应用是利用Android平台上的GooOe Map ez的API来获取当前设备的地理位置,可以定时地请求更新设备当前的地理位置信息。
Android提供的地图(Map)功能可能是广大开发者非常关心的一部分。
到目前为止,开发内嵌式地图应用的软件相当的困难,而且往往还需要支付很高的地图厂商的版权费用,加之手机上GPS功能还不完善,导致很多可以基于当前位置来开发功能的软件少之又少,就算是几个比较著名的LBS(Location—Based Service)软件,使用者也是寥寥无几。
Android的出现打破这一格局,提供给普通开发者非常灵活的地图展示与控制功能。
3.1相关地理知识的简介 在详细进入coding之前。
我们先介绍下经纬度知识。
经度是地球E一个地点离一根被称为本初子午线的南北方向走线以东或者以西的度数.本初子午线的经度是0度,地球上其它地点的经度是向东到180度或者向西到180度。
纬度是指某点与地球球心的连线赤道面所成的线面角,其数值在0至90度之间,位于迟到以北的点的纬度叫北纬,记为N,位于赤道以南的点的纬度称南纬,记为S。
所谓地图投影,就是在平面上建立与地球曲面上相对应的经纬网的方法。
地图投影的拟定和计算,一般均假定地球表面为旋转椭球面或参考椭球面。
3.2 C椭gle Map中的API 使用geocode,地球上任何一个地点都可以用精度+纬度来代表。
在Android中,corn.google.
android.maps.GeoPoinr这个类代表了一个地点的经纬度;GeoPoint(intlatitudeE6,intlongitudeE6),E6是纬度(microdegrees).就是度数再乘以1000000。
目前如果要指定地图地点,一定要传递一个Point的类到地图中。
Android中定义了一个名为corn.google.
android.maps的包,其中包含了一系列用语C,oogle Map上显示.控制和层叠信息的功能类,以下是该包中最重要的几个类: MapActivity:这个类是用语显示Google Map的Activity类,它需要连接底层网络。
MapView:MapView是用于显示地图的View组件。
它可以获取键盘事件(onKeyDown和onKeyUp)来支持地图移动和缩放功能。
它还支持多层Overlay,可以在地图上面画坐标,写地名,画图片等等,MapView必须和MapActivity配合使用。
另外,MapView还提供了卫星图、交通图和路况图3种模式功能。
MapCotroller.它是用语控制地图的移动。
Overlay:这是一个可显示于地图之上的可绘制的对象。
Ge炮Point:这是一个包含经纬度位置的对象。
使用GeoPoint对象,地球上的任何一点都可以用精度+维度来代表。
这个类对象代表了一个地点的经纬度:GeoPoint(int latitudeE6,int longtitudeE6),E6是微度(IIlicmdeg阳e8),就是度数再乘以1000000,目前如果要指定地图地点,一定要传递一个GeoPoint的类到地图中,例如: 纽约帝国大厦的经度和纬度 GeoPoint p=new GeoPoint(40.74836+1000IX)0,-73.984621+1000000); //获取当前地图的控制器 MapController me=mapview.getController0; /,地图中心移动到指定的点上 mc.animateTo(p); //放大到21级0evel),level的范围1-21 mc.zoomTo(21); 以下是几个Android关于定位功能的包中比较重要的类: LocationManager:本类提供访问定位服务的功能。
也提供获取最佳定位提供者的功能。
LocationProvider:该类是定位提供者的抽象类。
定位提供者具备周期性报告设备地理位置的功能。
LocationListener:提供定位信息发生改变时的回调功能。
必须实现在定位管理器中注册监听器对象。
Criteria:该类使得应用能够通过在LocationProvider中设置的属性来选择合适的定位提供者。
3.3项目源程序开发3.3.1用户界面的布局 Android是通过布局(Layout)定义UI(用户界面l的i^般视图W锯讨》可以直接在布爝垂孽batal?m声明。
组是触‖插w议能涵过 本栏目责任编辑:谢媛媛 万方数据第5卷第28期(2009年10月) Computer and伯酌∞锄电奠知识与技术自定义类来声明来实现: <corn.google.
android.maps.MapView Android:id=’’@+id/myGMap” Android:layout_width=”flU_parent” Android:layout_height=”fill_parent” Android:enabled=’’true” Android:clickable=”true” Android:apiKey=”API_Key_String”,>3.3.2申请APIkey 要使.}fj Google Map服务的话.我们需要一个APIkey。
我们可以通过如下方式获取APlkey: 1)找到USER—HOMEkl_Dcal SettingskApplication DatakAndroid目录下的debug.keystore文件。
2)使用keytool工具来生成认证信息(MD5),使用如下命令行: Keytool—。
list—-alias androiddebugkey‘。
keystore<path_to_debug._keystore>keystore—。
storepass
android‘’keypass
android 3)打开‘sign up for the
android maps API’页面,输入之前生成的认证信息(MD5)Fm将获取到你的APIkey。
41替换上面AndroidManifest.xml配置文件中“API?一Key_String”为你刚才获取的APIkey。
3.3.3权限设置 另外,要使用定位信息的话,必须设置一些权限,AndroidManifest.xml中的配置如下: <USES—permission
android:name=”
android.permission.INTERNET’’></uses-permission> <uses—permission
android:name=”
android.permission.ACCESS_COARSE_LOCATION”></uses-permission> <uses—permission
android:name=”
android.permission.ACCESS_FINE_LOCATION’’></uses-permissio>3.3.4程序中的核心代码3.3.4.1创建主程序 接着创建一个MyGPSActivity,并继承MapActivity的activity类: class MyGPSAetivity extends MapActivity {@Override public void onCreate(Bundle savedInstaneeState) f,,创建并初始化地图 gMapView=(MapView)findViewByld(R.id.myGMap); GeoPoint P=new GeoPoint((int)Oat+1000000),(in0(10ng宰1000000)); gMapView.setSatellite(true); mc 2 gMapView.getController0; mc.setCenter(p); 批.setZoom04); 卜·l3.3.4.2使用定位管理器 我们可以通过Context.getSystemService方法并传人Context.LOCATION_SERVICE参数获取定位管理器的实倒: LocationManager lm=(1_ocationManager)getSystemService(Context.LOCATION_SERVICE); 之后.我们需要将我们原先的MyGPSAetivity作一些修改,让它实现一个LocationIAstener接1:21,使其能够监听定位信息的改变: C1/tB8 MyGPSActivity extends MapActivity implements LocationListener {… public void onLoeationChangedCLoeation location)ll void onProviderDisabled(String provider){J public public void onProviderEnabled(String provider){} public void onStatusChanged(String provider,im stattm,Bundle extras){} protected boolean isRouteDisplayed0 {return false; ” 让我们来添加一些代码。
对LoeationManager进行一些初始化工作,并在它的onCreate0方法中注册定位监听器。
@Override void onCreate(Bundle savedlnstanceState) public 卜· LocationManager lm=(LocationManager)getSystemService(Context.IDCATION—SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.Of,this); l 现在的代码中的onLocationChan酬方法就会在用户的位置发生500米距离的改变之 进行调用。
这里默认使用的LocationProvider是“gps”(GSP_PROVIDER),不过你可以根据你的需要,使用特定的Criteria对象调用LocationManger类的getBestProvider方法获取其他的I.DcationProvider。
以下代码是onlx)cationChanged方法的参考实现: public void onLocationChanged(Location location) {if(10cation!=null) Ldo,,bh,lar’=toeation豸etLatitude0; doLLble l喏墙〔t’c|ktiorl,getLongitude0; p=new GeoPoInt((i枷lat+1000000,(int)lIlg+1000000); ‰.animateTo(p); 本栏臣贲妊编辑:谢媛媛 万方数据Computer Kno删ge and Technology电脯知识与技术 第5卷第28期(2009年10月) }} 上面的代码用于获取当前的新位置并更新地图上的位置显示。
3.3.4.3添加缩放控件 我们还可以为应用程序添加一些诸如缩放效果,地图标注,文本等功能。
//将缩放控件添加到地图上 ZoomControls zoomControls=(ZoomControls、gMapView.getZoomControls0; zoomControls.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); gMapView.addView(zoomControls); gMapView.displayZoomControls(true);3.3.4.4添加Map Overlay 下面的代码是定义一个overlay: ClaSS MyLocationOverlay extends corn.google,
android.maps.Overlay {@Override public boolean draw(Canvas canvas,MapView mapView,boolean shadow,long when) f super.draw(canvas,mapView,shadow); Paint paint=new Paint0; //将经纬度转换成实际屏幕坐标 Point myScreenCoords=new Point0; mapView.getProjeetion0.toPixels(p,myScreenCoords); paint.setStrokeWidth(1); paint.setARGB(255,255,255,255); paint.setStyle(Paint.Style.STROKE); Bitmap bmp 2 BitmapFaetory.decodeResource(getResources0,R.drawable.marker); canvas.drawBitmap(bmp,mySereenCoords.x,myScreenCoords.Y,paint); canvas.drawText(”Here I am…”.mySereenCoords.X,myScreenCoords.Y,paint); return true: ¨ 上面的这个overlay会在地图上最示一个“I am here”的文本。
让我们把这个overlay添加到地图上去: MyLocafionOverlay myLocationOverlay。
new MyLocatinnOverlay0; List<Overlay>list=gMapView.getOverlays0; list.add(myLocationOverlay); 3.4代码的运行 运行模拟器,在Eclipse的DMMS视图的“Emulator Control”窗口中我们可以输入经度和纬度值发送到模拟器上,之后模拟器的 屏幕上就会根据这个经纬度来进行定位。
实际效果图如图2。
4结论 Android手机应用程序开发着眼于它的整个体系构架,是一项复杂的工程。
本文分析了Android体系的层次架构,并通过一个应 用实例开发验证了其平台的可用性。
Android平台本身大量使用开源库类,并且为开发人员提供了一个非常便捷的开发环境。
相信 广大开发者可以借助Android提供的强大的源码开放软件开发包(SDK),开发出丰富多彩、极具个性的移动应用。
参考文献: 【l】商博.基于J2ME的移动通信技术的研究与应用【D】.沈阳工业大学硕士 学位
论文.2006. 【2】李观华,范辉.J2ME在移动通信程序中的应用【J1.计算机应用,2003,23(3): 124—126. 【3】廖永刚.余冬梅,张秋余.J2ME架构与安全机制的研究【J1.计算机工程与 设计,2006.27(4):575—577. 【4〕张超,王阿川,王智.基于J2ME和J2EE的手机软件的研究【J】.黑龙江科 技信息,2007(3):21,201. 【5】Keogh J.J2ME开发大全【M】.潘颖,王磊译.北京:清华大学出版社,2004. 〔6】刘向辉.基于Java的移动终端中间件的研究与设计时.华东师范大学硕 士学位
论文。
2005. 【7】叶达峰.Eclipse编程技术与实例【M】.北京:人民邮电出版社,2006 【8】刘岩.PCI标准及其应用现状的分析【J】。
信息安全与通信保密,2008,l(2): 38—40. 【9】差沙,地狱男爵.用Android开发手机应用叨.程序员,2008(1):25—27. 图2定位应用程序运行结果 本栏目贾任编辑:谢嫒嫒 万方数据基于Google
Android平台的应用程序开发与研究作者: 张仕成作者单位: 同济大学软件学院上海201804刊名: 电脑知识与技术英文刊名: COMPUTER KNOWLEDGE AND TECHNOLOGY年,卷期: 2009528被引用次数: 3次参考文献9条1.差沙地狱男爵 用
Android开发手机应用 2008012.刘岩 PCI标准及其应用现状的分析期刊
论文-信息安全与通信保密 2008023.叶达峰 Eclipse编程技术与实例 20064.刘向辉 基于Java的移动终端中间件的研究与设计 20055.Keogh J潘颖王磊 J2ME开发大全 20046.张超王阿川王智 基于J2ME和J2EE的手机软件的研究期刊
论文-黑龙江科技信息 2007037.廖永刚余冬梅张秋余 J2ME架构与安全机制的研究期刊
论文-计算机工程与设计 2006048.李观华范辉 J2ME在移动通信程序中的应用期刊
论文-计算机应用 2003039.高博 基于J2ME的移动通信技术的研究与应用 2006引证文献3条1.沈红雷.陈够喜.伍玉良 基于
Android系统终端实现3G WIFI无线漫游期刊
论文-电脑开发与应用 201132.胡伟
Android系统架构及其驱动研究期刊
论文-广州广播电视大学学报 201043.刘振宇.周荣慧 Google服务在
Android上的运用与分析期刊
论文-软件导刊 201011本文链接:http://d.g.wanfangdata.com.cn/Periodical_dnzsyjs-itrzyksb200928050.aspx.