0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Android开发平台的智能手机天气实况预报系统的实现

电子设计 作者:电子设计 2018-11-15 12:06 次阅读

引言

为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端,让手机能通过移动网和互联网访问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所示。

基于Android开发平台的智能手机天气实况预报系统的实现

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"/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/searchBtn"/>

上述代码生成了一个Linearlayout,定义了一个EditText 和Button,并且设置了相关的参数。在Android 中,控件最重要的大小属性是width/height,开发者可以指明控件的大小,控件的宽、高以及在屏幕中的显示位置等,可以设定成为fill_parent 和wrap_content.另外,还可以设置相应的文本信息,并可通过android:text="@string/cityText"/>进行引用(string 文件存放在工程的res/values 中)。按照这种方法,还可以依据需要定义相应的布局控件,譬如定义用来呈现天气实况信息的UI等。

2.2 创建中国城市列表数据

根据天气预报系统功能需求分析,系统启动后,应在主界面上呈现出中国国内所有城市的列表数据,因此需要创建中国城市列表数据,包括获取、解析城市列表数据,并在用户界面上呈现出来。为此,需要解决的问题是手机终端从Web 服务器获取了所有类型的数据之后,将这些数据进一步交给Android 手机终端View 组件[4],在手机界面上显示给用户。

⑴ 获取城市列表数据

Android 没有提供Web Service 的组件库,但可以通过修改在PC 或J2ME 上使用的开源Web Service Java 库作为AndroidWeb Servic 库使用。kSOAP2(http://ksoap2.sourceforge.net)是一个在智能手机上的SOAP Web Service 客户端包,可用于资源受限制的Java 环境如Applets 或J2ME 应用程序。在GoogleCode 上有一个项目ksoap2-android(http://code.google.com/p/ksoap2-android/)可用在Android 平台上实现轻量级的SOAP 库,即使用ksoap2-android 的API 来调用远端Web Service 的服务。

因此需要在CitiesWeatherForecast.java 的onCreate()中进行数据获取的初始化工作。通过定义一个方法public ListgetAllCitiesNames()可获得中国城市名称列表。也就是说,采用它提供的获得全球各个国家城市的方法GetCitiesByCountry,通过http://www.webservicex.net/globalweather.asmx 上的WebService 可提供天气预报服务。譬如,通过Constant.java 中的public class Constant{},设置SOAP Action 要调用的方法名、命名空间以及Web Service URL值,其源代码为:

public static final String SOAP_ACTION=

"http://www.webserviceX.NET/GetCitiesByCountry";

public static final String METHOD_NAME=

"GetCitiesByCountry";

public static final String SOAP_ACTION2=

"http://www.webserviceX.NET/GetWeather";

public static final String METHOD_NAME2="GetWeather";

public static final String NAMESPACE=

"http://www.webserviceX.NET";

public static final String URL=

http://www.webservicex.net/globalweather.asmx;

然后在WebServiceCaller.java 中实例化一个SoapSerializationEnvelope对象,设置SoapObject 的命名空间、方法名、参数等;并通过实例化一个AndroidHttpTransport 对象来调用WebService,并获得xml 字符串数据,其代码段如下:

AndroidHttpTransport androidHttpTransport=

new AndroidHttpTransport (Constant.URL);

try {

androidHttpTransport.call(soapAction, envelope);

Object result=envelope.getResponse();

xmlStr=result.toString();

} catch(Exception e) {

e.printStackTrace();

}

⑵ 解析数据列表

Android 操作系统对xml 字符串数据的操作功能很强,提供了dom、sax 以及xmlpul 3 种方式。Android SDK 提供了android.sax 包以方便SAX Handler 的开发,可用来解析xml 结果字符串。在本设计实例的CitiesWeatherForecast.java 文件中,解析xml 数据时,先通过RootElement root=new RootElement("NewDataSet")获得xml 数据的根节点;然后再寻找其子节点直到找到City 子节点,并设置一个监听器setEndTextElementListener()来获得City 子节点的值;最后使用org.xml.sax 的SAXParser 来解析xml 数据,把数据存入List并返回:

SAXParserFactory factory=SAXParserFactory.newInstance();

SAXParser parser=factory.newSAXParser();

XMLReader xmlreader=parser.getXMLReader();

xmlreader.setContentHandler(root.getContentHandler());

InputSource is=new InputSource

(new StringBufferInputStream(xmlStr));

xmlreader.parse(is);

⑶ 在UI上呈现城市列表数据

当获得List类型的数据之后,就可以把它绑定到main.xml 定义的ListView 组件上,然后使用ListActivity 呈现列表数据。在CitiesWeatherForecast.java 中的代码段为:

List cityList=getAllCitiesNames();

setListAdapter(new ArrayAdapter(this,

android.R.layout.simple_list_item_1, cityList));

即使用方法setListAdapter()把一个ListActivity 填充进去。

2.3 城市天气实况预报系统的调试

城市天气实况预报系统的测试结果如下。在Eclipse 的Package Explorer 窗口中用鼠标右键选择CitiesWeatherForecast工程名,在弹出的窗口中选择"Run As"→"Android Application"安装该应用程序到Android 模拟器并启动它。然后单击所要查询的城市名称列表项,稍等片刻便会显示出该城市的天气实况信息。也可以在文本框中直接输入所要查询的城市名称,单击"Search"同样会获得相应城市的天气预报信息。

3 结束语

Android 平台具有极大的开放性和兼容性,并且本身大量使用了开源代码库,深为开发人员所喜爱。Android 智能手机应用程序的开发涉及了它的整个体系结构,是一项非常复杂的工程。本文在介绍基于Android 平台的应用程序设计原理的基础上,提出了Android 用户界面设计、获取并解析城市列表数据的一种方法,给出了在用户界面上呈现数据的原理与设计过程,最后通过模拟器进行了应用程序的调试。当然,基于Android 平台的开发技术还需要进一步完善,需要在日后的工作中不断探索、研究,以建立实用的城市天气实况预报系统。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 智能手机
    +关注

    关注

    66

    文章

    18499

    浏览量

    180389
  • Android
    +关注

    关注

    12

    文章

    3937

    浏览量

    127504
  • 互联网
    +关注

    关注

    54

    文章

    11163

    浏览量

    103420
  • 操作系统
    +关注

    关注

    37

    文章

    6840

    浏览量

    123404
收藏 人收藏

    评论

    相关推荐

    基于IMS的双模智能手机系统的设计

    基于IMS的双模智能手机系统的设计
    发表于 08-20 13:11

    君正100美金低成本3G智能手机解决方案详解

    最高、功耗最低的低成本智能手机平台。该方案支持TD – SCDMA、EVDO、EDGE、GPRS 和 GSM,采用最新的Android 4.0冰激凌三明治系统。JZ4770
    发表于 12-19 11:13

    Windows Phone智能手机Android更让人满意

    国外调研公司ChangeWave的最新调查数据显示,Windows Phone的用户对自己的智能手机的满意度比Android手机用户要高。ChangeWave对一些智能手机的用户进行了
    发表于 01-21 16:08

    【转】智能手机如何“越狱”和ROOT?

    update from sdcard,按HOME键确认。系统更新完成后,将光标放在reboot system now上,再按HOME键,手机自动重启,ROOT完成。特别提示:智能手机越狱或ROOT后
    发表于 06-08 14:48

    基于NFC技术的智能手机设计

    定制化Nexperia智能手机系统方案,以开发出功能强大的多媒体手机产品。而采用飞利浦内建NFC功能的系统方案,则可让现在的
    发表于 06-19 06:30

    智能手机自动化测试技术

    近年来,随着Android智能手机操作系统的快速发展,越来越多的手机厂商及应用提供商专注于Android
    发表于 07-22 08:04

    基于Linux平台上的智能手机的解决方案

    每个系统要正常运行都有赖于CPU 的性能, 系统软件, 中间件一集各种系统策略等等, 智能手机也是一样。这篇文章主要探讨了给智能手机选择合适
    发表于 07-26 08:22

    智能手机怎么才能更加智能

    很明显,智能手机不仅融入了我们的日常商业活动,而且融入了我们的日常生活。过去,智能手机被定义为采用专用操作系统(OS)的蜂窝电话。这意味着智能手机可以增加或安装/删除应用软件,虽然这种
    发表于 08-20 08:32

    如何设计智能手机省电系统

    智能手机中包含了很多耗能设备, 诸如MP3、MPEG- 4、Wi-Fi、数码相机、3D 游戏等等。在手机电池容量还没有实现质的飞跃的前提下, 我们不得不考虑手机电源节能的问题。我主要通
    发表于 11-05 08:03

    紫光展锐宣布六款智能手机芯片已完成对Android 11的部署

    近日,紫光展锐发布的一则消息吸引了业界的关注。该公司表示,通过同步参与Android 11的开发,其六款智能手机芯片已完成对Android 11的部署。在Google发布
    发表于 02-01 06:24

    请问如何去设计一种智能手机系统

    智能手机系统的硬件设计智能手机系统的软件设计基于嵌入式Linux的智能手机系统设计
    发表于 04-25 07:00

    如何用智能手机模拟15693标签的源代码?

    大家好。我有一个基于 ST25R3911B 的 NFC 标签阅读器,我目前正在使用它来读取“真正的”NFC-V 15693 标签。我想制作“虚拟”标签,可能是通过智能手机,并使它们可从 NFC
    发表于 12-28 12:58

    Android智能手机天气预报系统设计及实现

    Android智能手机天气预报系统设计及实现
    发表于 01-14 11:22 22次下载

    基于Android 智能手机平台实现了车载监控管理系统的设计方案

    的基于单机应用向基于互联网应用做转变。随着智能手机的迅猛发展,智能手机平台将成为GIS技术互联网应用新的应用平台。 2 Android
    发表于 10-26 11:09 0次下载
    基于<b class='flag-5'>Android</b> <b class='flag-5'>智能手机</b><b class='flag-5'>平台</b><b class='flag-5'>实现</b>了车载监控管理<b class='flag-5'>系统</b>的设计方案

    Android智能手机木马实现

    随着Android智能操作系统的发展,基于该平台智能手机与各类平板电脑已经成为人们日常生活中不可分割的一部。而与此同时针对该
    发表于 11-06 16:25 6次下载
    <b class='flag-5'>Android</b><b class='flag-5'>智能手机</b>木马<b class='flag-5'>实现</b>