ANDROID毕业设计论文.doc

上传人:laozhun 文档编号:4018610 上传时间:2023-04-01 格式:DOC 页数:34 大小:914KB
返回 下载 相关 举报
ANDROID毕业设计论文.doc_第1页
第1页 / 共34页
ANDROID毕业设计论文.doc_第2页
第2页 / 共34页
ANDROID毕业设计论文.doc_第3页
第3页 / 共34页
ANDROID毕业设计论文.doc_第4页
第4页 / 共34页
ANDROID毕业设计论文.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《ANDROID毕业设计论文.doc》由会员分享,可在线阅读,更多相关《ANDROID毕业设计论文.doc(34页珍藏版)》请在三一办公上搜索。

1、目 录摘要IAbstractII第一章绪论111 研究内容112 研究意义113 研究现状和发展趋势1第二章 系统分析32.1 研究目标32.2 需求分析32.3 性能分析3第三章 系统开发环境及相关技术43.1 Android开发环境介绍43.2 Android开发平台搭建4第四章 程序设计64.1 用户界面设计64.2 数据库设计64.3 程序模块设计7第五章程序开发95.1 文件结构与用途95.2 数据提供者105.3 后台服务165.3.1 获取天气数据165.3.2 读取天气数据实例195.3.3 定时更新时间。195.4 用户界面195.4.1 程序入口类ForecastWidge

2、t195.4.2 设置页面ConfigureActivity215.4.3 详细页面DetailForecastActivity225.5 动态特效23第六章 系统测试25第七章总结29参考文献30致 谢31第一章绪论11 研究内容Android平台3G手机气象软件是基于Android手机平台,运用Java语言,从Google上获取天气预报信息,开发出针对使用Android平台的手机天气预报系统。12 研究意义Android平台3G手机气象软件的开发可以进一步扩大气象信息的覆盖面,让广大公众能够在第一时间方便且快捷地获取最新的气象预报(预警)信息,以便提前预防,把气象灾害造成的损失降到最低。同

3、时也可以强化气象公共服务的职能,完善公共服务体系、改善公共服务手段、增加公共服务产品、提高公共服务质量,更好地发挥了气象事业对经济社会发展的现实性作用。13研究现状和发展趋势据Gartner最新数据显示,2010年第二、三季度全球智能手机销售继续大幅增长,其中第三季度安卓占全球智能手机市场的25.5%,仅次于塞班,成为第二大智能手机系统。2010第二、三季度与去年同期相比,增度分别是15.4%及22%,增势迅猛。而塞班系统较09年的市场份额,尽管终端销量有大幅度提升,但增势下滑10%,形势非常严峻。其他操作系统的表现则要平稳很多。安卓是首款开源代码的操作系统,采用Linux内核,开放手机联盟(

4、OHA)成员可以任意使用和修改安卓的SDK软件包。系统的开源性使其具有良好的拓展性,一方面,为众多移动应用开发者提供了良好的系统性平台,有利于移动应用的集合;另一方面,终端厂商可以针对自身的特殊需要“定制化开发”。与此相比,尽管2010年2月,塞班基本完成开源工作,但由于代码臃肿,用户界面设计缺失,塞班的开源并无实际意义,错失发展良机。据Informa预测,2012年,安卓手机销量将超过诺基亚塞班手机,届时安卓将成为全球最大的智能手机平台。谷歌表示目前安卓手机每日平均激活量为20万部,销售速度加速上涨。我们认为,安卓在全球市场的成长壮大,塞班市场份额不断下跌已成不争事实。安卓操作系统发展迅猛主

5、要得益于免费、开源和良好产业运作策略,这三点为安卓在智能手机市场赢得更多的发展机遇。系统的免费让更多的厂商加入,推动了份额的上升;代码的开源让更多的开发者进入应用开发;应用的丰富吸引了更多用户选择,这也是谷歌值得众多厂商学习的地方。此外,谷歌通过OHA联合众多厂商进行系统研发,不断更新版本,将系统应用推广到更多的终端产品中,确保用户体验持续改善。第二章 系统分析2.1 研究目标(1)了解Android应用程序的设计和开发过程;(2) 使用多种组件进行Android 平台3G手机气象软件的开发。本软件是基于Eclipse的开发环境,依托Google气象数据建立气象信息数据库,开发出了针对Andr

6、oid平台的手机天气预报系统。2.2 需求分析本软件是一个App Widget应用程序,启动程序后可以进行城市、更新频率的设置,可以通过图片和文字显示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,从Google上获取天气预报信息,并将天气信息保存在数据库中。从上面的描述中可以基本了解软件的功能需求:(1) 启动App Widget应用程序;(2) 设置界面:对要显示天气预报的城市及更新频率进行设置;(3) 显示界面:通过文字和图片显示当前的天气情况,包括日期、时间、城市、最高温度、最低温度、当前温度等。(4) 详细界

7、面:通过文字图片动画显示当前的天气情况,包括城市当前天气、温度、风向、风速、湿度;同时显示今后四天的天气情况。2.3 性能分析程序响应速度快、安全性高、信息处理速度快。第三章 系统开发环境及相关技术3.1 Android开发环境介绍Android的上层应用程序是用Java语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java继承开发环境Eclipse。只有Eclipse还不够,因为是使用Java语言进行开发,还应该有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的应用程序开发和Jav

8、a开发有较大区别的,所以还需要有Google提供的Android SDK。同时,还需要在Eclipse安装ADT,为Android开发提供开发工具的升级或者变更,是Eclipse下开发工具的升级下载的工具。简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序的开发。(1) Java SDK(2) Eclipse(3) Android SDK(4) ADT3.2 Android开发平台搭建Android开发平台搭建步骤:首先到http:/www.eclipse.org/downloads/下载Eclipse集成开发环境并且解压,这里推荐下载Java EE 集成版本

9、,可以为平台的搭建省下不少工作。接着再去 站点下载SDK后安装,下载 SDK1.5后解压。第一步下载工序就结束了。双击Eclipse解压后目录中的eclipse.exe然后启动,选择Eclipse菜单中的Help- Install New Software- 选项卡上的Available Software,点击右侧的“Add”输入http:/dl- with”下拉菜单中选择刚才输入的网址。过一会就会出现一个Developer Tools选项,勾上以后点击Next以后Eclipse会自动网上查找Android 开发工具插件,然后找到Android DDMS和Android Development

10、 Tools,选中这两个点击Finish,Eclipse就会自动下载并安装Android插件了,最后会提示重启Eclipse。重启后选择Eclipse菜单中的Windows- Preferences 在左侧的Android项目中SDK Location中填入Android SDK解压后的目录,然后点击Apply。在WindowsXP的系统变量中的path变量中添加一个值,该值指向解压后的Android SDK目录下的tools文件夹。第四章 程序设计4.1 用户界面设计根据需求分析可以知道,应用程序应包含三个主要的用户界面,这里需要进一步分析每个用户界面中应该包括哪些显示内容。在“设置页面”中

11、,需要对要显示天气预报的城市及更新频率进行设置。在“显示页面”中,显示当前的天气状况,包括城市名称、温度、湿度、风向、雨雪情况和获取数据时间等信息。在“详细页面”动态显示当前天气情况,还要显示未来四天的天气情况。根据对用户界面显示内容的分析,绘制出用户界面的草图,如图4-1所示。图4-1 用户界面草图4.2 数据库设计 本软件中有两部分数据需要存储,一个是显示页面的数据,另一个详细页面的数据。因此选择SQLite数据库作为存储数据的方法,建立数据库forcasts.db,并且建立两张表weather_forcastt和weather_widget,分别存储显示页面的数据和详细页面的数据。表4-

12、1 详细页面的数据库表weather_forcast的结构属性数据类型说明_idinteger自动增加的主键widgetIdinteger组件的ID号dayOfWeektext周几lowinteger最低温度hightinteger最高温度icontext显示天气的图标conditiontext未来天气情况表4-2 显示页面的数据库表weather_widget的结构属性数据类型说明_idinteger存储Widget组件idcitytext进行天气信息查询的城市名updateMilistext进行天气信息查询的频率,单位为分/次isConfiguredtext是否设置postalCodete

13、xt城市标记forecastDateinteger预报日期conditiontext当前天气情况tempFinteger最高温度tempCinteger最低温度humiditytext当前湿度icontext天气图标windConditiontext风向风速情况lastUpdateTimeinteger最后一次更新时间4.3 程序模块设计 从功能需求上分析可以看出,整个应用程序应划分为4个模块,分别是程序启动、用户界面、后台服务和数据库适配器,各模块之间的关系如图4-2所示。 从模块结构图中不难看出,后台服务是整个应用程序的核心,主要是“数据获取模块”,负责周期性的从Google获取天气信息。

14、后台服务在程序启动时就由AppWidgetProvider启动,也可由用户界面通过startService()进行启动,启动后的后台服务将一直保持运行状态。 用户界面从数据库中获取天气信息,而没有直接通过网络访问Google的天气数据。之所以这么实际,一方面可以避免因网络通信不畅造成界面失去响应;另一方面,后台服务可以及时更新数据,以保证数据的准确性。 数据库适配器封装了所有对SQLite数据库操作的方法,用户界面和后台服务会调用它来实现数据库操作。 在完成用户界面设计、数据库设计和模块设计后,至此程序设计阶段基本完成。第五章程序开发5.1 文件结构与用途在程序开发阶段,首先确定“Androi

15、d平台3G手机气象软件”的工程名为ty-weather,据程序模块设计的内容,建立ty-weather工程。Weather工程源代码的结构如图5.1所示。图5.1 ty-weather工程的源代码文件为了使源代码文件的结构更加清晰,Weather工程设置了多个命名空间,分别用来保存用户界面、数据库、后台服务和工具实体的源代码文件,源代码文件的名称以及说明如表5.1所示。表5.1 ty-weather工程的文件用途说明包 名 称文 件 名说 明com.ty.weatherConfigureActivity.java“设置页面”的Activitycom.ty.weatherDetailForeca

16、stActivity.java“详细页面”的Activitycom.ty.weatherForecastProvider.java天气预报相关数据提供者,操作数据库com.ty.weatherForecastService.java后台进程内服务com.ty.weatherForecastTimeService.java后台时间服务com.ty.weatherForecastWidget.java实现AppWidget组件,并启动服务com.ty.weatherWebServiceHelper.java网络数据获取模块com.ty.weather.utilForecastEntity.java

17、未来天气信息的类com.ty.weather.utilForecastUtil.java天气信息工具类com.ty.weather.utilWidgetEntity.java当前天气信息的类Android的资源文件保存在/res的子目录中。其中、/res/anim目录中保存的是产生动画效果的XML文件,/res/drawable/目录中保存的是图像文件,/res/values目录中保存的是用来自定义字符串和颜色的文件,/res/xml目录中保存的是XML格式的数据文件。所有在程序开发阶段可以被调用的资源都保存在这些目录中,具体每个资源文件的用途可以参考表5.2:表5.2 资源文件名称与用途资源

18、目录文 件说 明animrotatecurrentweather.xml渐变透明度动画效果translatecloudleft.xml画面转换位置移动动画效果(从左至右)translatecloudright.xml画面转换位置移动动画效果(从右至左)translaterain01.xml画面转换位置移动动画效果(从上至下)translaterain02.xml画面转换位置移动动画效果(从上至下)translaterain03.xml画面转换位置移动动画效果(从上至下)translaterain04.xml画面转换位置移动动画效果(从上至下)translaterain05.xml画面转换位置移

19、动动画效果(从上至下)drawablecloudy.png这个文件夹里是工程里所用的图片,如有表示天气状况、数字等,此处不赘述。dots.pngnumber_7_tahoma.pngweather_sunny.pnglayoutconfigure.xml设置城市、天气更新频率的布局weather.xml“显示页面”的布局detail.xml“详细显示”页面上边的显示当前天气的布局detailitems.xml“详细显示”页面下边的显示未来天气的布局valuescolor.xml保存颜色的XML文件strings.xml保存字符串的XML的文件xmlweatherwidget.xmlAppWid

20、get的属性文件5.2 数据提供者数据提供者ForecastProvider继承ContentProvider,是在应用程序间共享数据的一种接口机制。应用程序在不同的进程中运行,因此,数据和文件在不同的应用程序之间是不能够直接进行访问的。而CotentProvider为程序员提供了较高级的数据共享方法,应用程序可以指定需要共享的数据,而其他应用程序则可以在不知数据来源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作。 在介绍ForecastProvider的核心代码前,首先了解一下WidgetEntity.java(当前天气信息的类)和ForecastEntity.java(未来天气

21、信息的类)。(1) WidgetEntity.java的部分代码:public class WidgetEntity private ArrayList details = new ArrayList(); /ForecastEntity对象private Integer id; /编号private Integer updateMilis; /更新频率private String city; /城市private String postalCode; /城市标记private Long forecastDate; /预报时间private String condition; /天气情况pri

22、vate Integer tempF; /华氏温度private Integer tempC; /摄氏温度private String humidity; /湿度private String icon; /天气图标private String windCondition; /风力风向private Long lastUpdateTime; /最后更新时间private Integer isConfigured; /是否已设置.从代码中可以看出,除ForecastEntity 的对象details, WidgetEntity类中有以上公有静态属性id、updateMilis 、updateMil

23、is、postalCode、forecastDate、condition、tempF、tempC、humidity、icon、windCondition、lastUpdateTime、isConfigured,完全对应数据库中weather_widget的表。(2) ForecastEntity.java的部分代码:public class ForecastEntity private Integer id; /编号private String dayOfWeek; /星期private Integer low; /最低温度private Integer hight; /最高温度private

24、 String icon; /天气图标private String condition; /天气情况private Integer widgetId; /组件id从代码中可以看出,WidgetEntity类中有以上公有静态属性id、dayOfWeek、low、hight、icon、condition、widgetId,完全对应数据库中weather_forcast的表。 在创建ForecastProvider时,首先需要使用数据库、文件系统或网络实现底层存储功能,这里我们采用数据库建立了数据库设计中的两张表,从而实现了底层存储功能。然后在继承ContentProvider的类中实现基本数据操作

25、的接口函数,包括添加、删除、查找和更新等功能。下面就核心代码进行分析。(1) 创建数据库:DatabaseHelper类继承SQLiteOpenHelper,SQLiteOpenHelper这个类可以辅助建立、更新和打开数据库。DatabaseHelper在建立数据库时,同时建立了两个数据库表weather_widget和weather_forcast,并对保存配置信息的表进行了初始化。具体代码如下所示:private static class DatabaseHelper extends SQLiteOpenHelper /数据库名称private static final String D

26、ATABASE_NAME = forecasts.db;/数据库版本private static final int DATABASE_VERSION = 2;/构造方法,重载父类构造public DatabaseHelper(Context context) super(context, DATABASE_NAME, null, DATABASE_VERSION);public void onCreate(SQLiteDatabase db) /创建weather_widget表public void onCreate(SQLiteDatabase db) /创建weather_widget

27、表db.execSQL(CREATE TABLE + TABLE_WIDGET + ( .);/创建weather_forecast表db.execSQL(CREATE TABLE + TABLE_FORECAST + ( .);/重写onUpgrade()方法Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) .(2) URI设置:ContentProvider可以提供多个数据集,调用者使用URI(通用资源标识符)对不同的数据集的数据进行操作。URI用来地位任何远程或本地的可用资源。

28、ContentProvider使用的URI语法结构content:/。因此,我们就需要先来对URI进行设置。代码如下:public static class WeatherWidgets implements BaseColumns /继承BaseColumns可以提供自动生成的ID/声明CONTENT_URIpublic static final Uri CONTENT_URI = Uri.parse(content:/+ AUTHORITY + /widgets);public static final String FORECAST_END = forecasts;/指操作多条数据pub

29、lic static final String CONTENT_TYPE = vnd.android.cursor.dir/awidget;/指操作单条数据public static final String CONTENT_ITEM_TYPE = vnd.android.cursor.item/widget;(3) 查询功能:首先我们先了解一下SQLiteQueryBuilder的query()方法。query(SQLiteDatabase db, String projectionIn, String selection, String selectionArgs, String grou

30、pBy, String having, String sortOrder, String limit),参数说明如表5.3:参 数说 明SQLiteDatabase db要查询的数据库实例String projectionIn是一个字符串数组,里边的每一项代表了需要返回的列名String selection相当于SQL语句中的where部分String selectionArgs是一个字符串数组,里边的每一项依次替代在第三个参数中出现的问号(?)String groupBy相当于SQL语句当中的groupby部分String having相当于SQL语句当中的having部分String so

31、rtOrder描述是怎么进行排序String limit相当于SQL当中的limit部分,控制返回的数据的个数查询功能的核心代码如下:public Cursor query(Uri uri, String projection, String selection,String selectionArgs, String sortOrder) /getReadableDatabase()这个函数会数据库是否存在、版本号和是否可读等情况,/决定在返回数据库对象前,是否需要数据库。返回一个可读的数据库对象。SQLiteDatabase db = dbHelper.getReadableDatabas

32、e();/声明了一个SQLiteQueryBuilder对象,该对象利用传入的参数生成一个完整的/sqlite查询语句,还可以完成查询工作并返回结果集(Cursor)。SQLiteQueryBuilder qb = new SQLiteQueryBuilder();String limit = null;/通过一个switch语句,完成了通过uri种类的辨别来生成不通的SQLiteQueryBuilder对象的工作。switch (uriMatcher.match(uri) case WIDGETS: qb.setTables(TABLE_WIDGET); break; case WIDGET

33、S_ID: String appWidgetId = uri.getPathSegments().get(1); qb.setTables(TABLE_WIDGET); qb.appendWhere(BaseColumns._ID + = + appWidgetId); break; case WIDGETS_FORECASTS: / Pick all the forecasts for given widget, sorted by date and / importance /获得appWidgetId String appWidgetId = uri.getPathSegments().

34、get(1); /为该SQLiteQueryBuilder对象设置它查询工作将针对的表 qb.setTables(TABLE_FORECAST); /qb的where条件 qb.appendWhere(ForecastEntity.WIDGET_ID + = + appWidgetId); /按照BaseColumns._ID进行排序 sortOrder = BaseColumns._ID + ASC; break; case FORECASTS: qb.setTables(TABLE_FORECAST);break;case FORECASTS_ID: String forecastId =

35、 uri.getPathSegments().get(1);qb.setTables(TABLE_FORECAST);qb.appendWhere(BaseColumns._ID + = + forecastId);break;return qb.query(db, projection, selection, selectionArgs, null, null,sortOrder, limit);(4) 添加、删除、更新功能由于核心代码类似,此处不一一赘述。添加功能:public Uri insert(Uri uri, ContentValues values) 删除功能:public in

36、t delete(Uri uri, String selection, String selectionArgs) 更新功能:public int update(Uri uri, ContentValues values, String selection,String selectionArgs) (5) 类型匹配:增删改查通过switch判断,进行不同的操作,因而还需要对关键字进行类型匹配。核心代码如下:/*getType()函数用来返回指定URI的MIME数据类型 * CONTENT_TYPE表示URI是多条数据 * CONTENT_ITEM_TYPE表示是单条数据 */Override

37、public String getType(Uri uri) / TODO Auto-generated method stubswitch (uriMatcher.match(uri) case WIDGETS: return WeatherWidgets.CONTENT_TYPE; case WIDGETS_ID: return WeatherWidgets.CONTENT_ITEM_TYPE; case WIDGETS_FORECASTS: return WeatherDetails.CONTENT_TYPE;case FORECASTS:return WeatherDetails.CO

38、NTENT_TYPE;case FORECASTS_ID:return WeatherDetails.CONTENT_ITEM_TYPE;throw new IllegalStateException();/构造无匹配方式的uriMatcherprivate static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);private static final int WIDGETS = 101;private static final int WIDGETS_ID = 102;private static f

39、inal int WIDGETS_FORECASTS = 103;private static final int FORECASTS = 201;private static final int FORECASTS_ID = 202;/声明了uriMatcher的匹配方式和返回代码static uriMatcher.addURI(AUTHORITY, widgets, WIDGETS);uriMatcher.addURI(AUTHORITY, widgets/#, WIDGETS_ID);uriMatcher.addURI(AUTHORITY, widgets/#/forecasts, WI

40、DGETS_FORECASTS);uriMatcher.addURI(AUTHORITY, forecasts, FORECASTS);uriMatcher.addURI(AUTHORITY, forecasts/#, FORECASTS_ID);5.3 后台服务后台服务是ty-weather工程的核心模块,在用户启动后持续在后台运行,直到用户停止服务。后台服务主要有三个功能,一是周期性的获取Google的天气数据并存储到SQLite,二是从SQLite读取出要显示的数据,三是定时更新“显示页面”的时间。5.3.1 获取天气数据天气数据的获取天气数据分为以下三个步骤:(1) 从Google提供

41、的Web Service中获取的天气数据,数据的获取地址是: public static WidgetEntity queryWebservice(String postalCode)throws ForecastParseException /编码出错if (postalCode = null) throw new ForecastParseException(can not covert to entity);Reader responseReader;WidgetEntity widgetEntity = null;/通过HttpClient创建Http连接HttpClient clie

42、nt = new DefaultHttpClient();/创建Http Get请求HttpGet request = new HttpGet(String.format(WEBSERVICE_URL, postalCode);try Log.d(TAG, get googles weather infomation);/发出请求HttpResponse response = client.execute(request);StatusLine status = response.getStatusLine();Log.d(TAG, Request returned status + status);/取出回复信息HttpEntity entity = response.getEntity();responseReader = new InputStreamReader(entity.getContent(), GB2312); catch (IOException e) throw new ForecastParseException(Problem callin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号