0 引言
为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端,让手机能通过移动网和互联网访问Web 网站并处理各项业务。Android系统是Google 公司开发的一个开源手机操作系统,它包括了操作系统、用户界面和应用程序,即智能手机工作所需的全部软件。Android 的最大特点是它的开放性体系架构,不仅具有非常好的开发、调试环境,而且还具有各种可扩展的设施,包括丰富的图形组件、多媒体支持功能和强大的浏览器,而且已有许多比较成熟的应用案例。
本文提出了智能手机天气实况预报系统的一种设计实现方法,供开发者参考。
1 Android应用程序设计原理
一个Android 应用程序,通常由AcTIvity、Intent Receiver、Service、CONtent Provider 四种功能组件构成。但是,并不是每一个Android 应用程序都需要用到这四种功能组件,而是只需上述四种功能组件的某些组合。
1.1 Activity
Activity 是最基本的Android 应用程序组件。大多数应用由多个屏幕组成,一个Activity 通常则是一个单独的屏幕。每一个Activity 都被实现为一个独立的类,并且从Activity 基类中继承而来。Activity 类将会显示由视图控件组成的用户接口,并对事件做出响应。Android 使用Intent 这个特殊类,实现在屏幕与屏幕之间移动。通过解析各种Intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,Activity 将会调用STartActivity(Intent myIntent)方法,然后,系统会在所有安装的应用程序中所定义的IntentFilter 中查找,找到最匹配myIntent的和Intent 对应的Activity.新的Activity 接收到myIntent 的通知后,开始运行。当startActivity 方法被调用时将触发解析myIntent 的动作。这个机制具有两点优势:一是能够重复利用从其他组件中以Intent 形式产生的一个请求;二是Activity 可以在任何时候被一个具有相同IntentFilter 的新Activity 取代。
1.2 Intent Receiver
通过Intent Receiver 实现的应用能够对一个外部的事件作出响应。Intent Receiver 在AndroidManifest.xml 中注册,也可以在代码中使用Context.registerReceiver()进行注册。当一个IntentReceiver 被触发时,应用不必对请求调用Intent Receiver,系统会在需要的时候启动应用。各种应用还可以通过使用Context.
brOAdcastIntent()将它们自己的Intent Receiver广播给其他应用程序。
1.3 Service
Service 是一段长生命周期的、没有用户界面的程序。例如媒体播放器这个Activity 会使用Context.startService()来启动一个Service,从而可以在后台播放音乐。同时,系统也将保持这个Service 一直执行,直到Service 运行结束。系统可通过使用Context.bindService()方法,连接到一个Service 上(如果这个Service 还没有运行将启动它)。当连接到一个Service 之后,还可以利用Service 提供的接口与它通信。就媒体播放器来说,还可以进行暂停、重播等操作。
1.4 Content Provider
Android 应用程序能够将它们的数据保存到文件、SQL 数据库,甚至是任何有效的设备中。Content Provider 实现了应用数据与其他的应用程序的共享。Content Provider 类实现一组标准的方法,能够让其他应用程序保存或读取此ContentProvider处理的各种类型数据。在Android 中,默认使用SQLite 作为系统数据库,但使用方法略有不同。Android 中每一个应用程序都运行在各自的进程中,当访问其他应用程序的数据时,需要在不同的虚拟机之间传递数据,这样操作起来会有些困难(正常情况下,不能读取其他应用程序的数据库文件)。ContentProvider 正是解决不同的应用包共享数据的工具。
2 天气实况预报系统的具体实现
基于Android 平台的智能手机访问服务器的主要技术是数据交互方法。基于Android 操作系统的天气实况预报系统设计的核心是通过调用通信协议SOAP(Simple Object AccessProtocol)的接口,从Web Service 提供商中提取天气预报的数据信息,为客户端服务。其基本功能是当用户运行天气预报系统程序时,在手机屏幕上显示出中国的城市名称,用户单击任意一个城市名,可获得该城市的天气实况预报信息。用户也可以输入城市名称,点击查询获得天气预报信息。CitiesWeather-Forecast 工程目录结构及其源代码文件如图1所示。
2.1 Android平台的用户界面实现
Android 提供的可变化的用户界面(UI)开发模块是基于XML 文件的。这些XML 文件放在工程/res/layout 下面。这个目录可包含所有应用程序所需的非码部分,比如图片、字符串、xml 文件。当要使用到这些资源时,在代码目录中打开R.java文件即可。在XML 文件里编辑界面的代码,实现起来不仅方便,使用时也会更加灵活。
在Android 程序设计中要用到一些基本的Android UI 元素,通过使用Views、View Groups 和layouts 可为Activity 创建功能性的、富有直观力的UI.通常是使用Android SDK 中提供的一些控件,进行布局、扩展和定制这些控件,并使用ViewGroups 去组合Views,创建由相互作用的子控件组成的原子的、重复利用的UI 元素。也可以创建自己的Views,来实现显示数据和与用户交互的新途径;或使用一些继承自View Group 的Layout 管理器来组织Android UI中的单个元素到屏幕上。
在一个Android 应用中,用户界面由View 和View Group对象构建。View 与View Group 有很多种类,而它们都是View类的子类。View 对象是Android 平台中用户界面的基本单元。View 类是widgets(工具)类的父类,它们提供了诸如文本输入框和按钮之类的UI 对象的完整实现。View Group 类是Layouts(布局)类的父类,它们提供了诸如流式布局、表格布局以及相对布局之类的布局架构。
View 对象是一个数据体,它的属性存储了用于屏幕上一块矩形区域的布局参数及内容。并负责它所辖的这个矩形区域之中所有测量、布局、焦点转换、卷动以及按键/触摸手势的处理。作为一个用户界面对象,View 同时也担任着用户交互关键点以及交互事件接受者的角色。天气实况预报系统程序功能比较单一,其UI 也相对比较简单,只要有一个输入框、一个查询按钮以及一个显示所有中国城市信息的列表即可。为了建立Android 平台的用户界面,首先要在Package Explorer 窗口中展开Layout 后新建。xml 文件,用来对窗口界面进行布局,主要有系统运行的主配置文件main.xml 和result.xml.
Layout 是一类特殊的ViewGroup 控件,它们本身没有任何可显示内容,存在的惟一原因就是其中的内部结构,能够更好地摆放它的子控件。比如Linearlayout,可将子控件按水平或垂直方向按顺序排列下去;Tablelayout,可以将子控件按照表格的形式,一枚枚放置好;Relativelayout 更灵活,可以设定各个控件之间的对齐和排列关系,适合定制复杂的界面。有了Layout 的存在,控件和控件之间不再是割裂地存在,而是更有机地结合在一起,设定起来也更为方便。在本实例的main.xml 文件中主要是添加一些界面的布局设置,例如如下代码:
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cityText"/>