基于Android的天气预报查询系统设计



早前模仿别人的做的一个APP,基于Android的天气预报设计,加上语音识别的功能,现在分享一下,希望可以给大家带来帮助。代码仓库:https://github.com/Yang-Jianlin/Hefeng-Xiyu

城市选择界面的设计,城市选择界面主要针对首次使用系统的用户的初始城市设置和系统使用过程中切换城市的设置。接口主要包括省、市、县(区)三级。最终的天气界面将显示所选县(区)的具体天气情况。

[En]

The design of the city selection interface, the city selection interface is mainly aimed at the initial city settings of the user using the system for the first time and the settings of switching cities during the use of the system. The interface mainly includes three levels: province, city and county (district). The final weather interface will display the specific weather conditions of the selected county (district).

当用户首次进入系统时,城市选择页面作为初始化城市设置出现在系统欢迎界面之后,占据整个系统界面,以三级模式先显示省级行政单位,然后根据用户的具体选择一级级显示市、县(区)。当用户进入系统之后,或者非首次使用该系统,城市选择界面将在屏幕右滑后出现,占据整个屏幕的3/4,仍然是三级模式显示。本系统设计上,城市选择布局整体上采用LinearLayout形式,分为上下两个部分,即标题栏和城市显示栏。其中,标题栏显示的是用户选择城市的名称和标记按钮,采用RelativeLayout形式,左边显示标记按钮,中间显示所选城市名称。城市显示栏采用ListView形式,ListView在Android中表现为一个列表样式,从上到下滑动逐行显示行政单位名称,并且每一行可以作为一个点击按钮,方便三级行政单位的级联点击。

天气数据显示界面总体分为上下五个部分,依次为工具栏、实时天气界面、预报天气界面、舒适度界面、生活建议界面,总体界面采用FrameLayout形式。

  1. 工具栏,工具栏显示界面采用RelativeLayout形式,横向依次为城市选择菜单按钮、后台更新间隔按钮、城市名称、语音播报按钮、语音识别按钮。
  2. 实时天气界面,此界面分为上下两个部分。上一部分左边显示的为对应实时天气的图标(如,”晴”就显示” “),右边显示对应的实时温度和天气。实时天气界面的下一部分显示小时(3小时间隔)天气预报,方便用户了解今日天气具体状况,以达到精确出行的目的。小时预报采用HorizontalScrollView形式,这种形式表现为横向列表,通过左右滑动的方式查看小时预报。
  3. 预报天气界面,此界面主要显示的是未来6天天气情况,界面总体采用LinearLayout形式,在LinearLayout中使用TextView显示每天的天气状况,包括日期、晴雨、最高温度、最低温度四项天气数据,同时,在此界面中加入一个按钮用以链接到和风天气网站,让用户可以查看详细天气数据。最后将每一个TextView嵌入进预报界面的ListView框架之中,以列表的形式显示。
  4. 舒适度界面,此界面主要包含体感温度、空气湿度、风力、能见度四部分内容,界面通过布局的四层嵌套来完成设计,第一层(最外层)采用LinearLayout,第二层在第一层基础上分成几个LinearLayout,第三次是嵌套在第二层中的RelativeLayout,第四层采用LinearLayout对每一项数据垂直显示。具体设计图如图4-1所示。

基于Android的天气预报查询系统设计
  1. 生活建议界面,此界面主要为用户提供一些合理的生活建议,包括空气状况建议、舒适度、洗车指数、运动建议。界面总体采用LinearLayout形式,将其分为上下四层,每一层为一个TextView,分别在每个TextView中显示根据获取的天气数据提供的建议。

Android系统主要提供了三种方式用于实现简单的数据持久化功能,即文件存储、SharedPreference存储以及数据库存储。其中,Android为方便数据存储专门为开发者提供了一个SQLite数据库,其操作语法和开发者常用的MYSQL数据库基本一致,但是对于Android应用程序开发者而言,SQLite操作繁琐复杂。因此,本设计采用LitePal,即GitHub上的开源数据库的框架,它是对象-关系映射模型,同时封装了一些最常用的数据库功能,使开发人员无需编写单独的SQL语句就可以完成建表、删除、修改、查找等各项数据库操作。

开发者使用LitePal,首先需要在Android工程的build.gradle中添加依赖,引入LitePal,即引入LitePal开源库。接下来需要在assets目录下创建litepal.xml文件,其中,dbname指的是SQLite数据库的名称,version指的是SQLite数据库的版本号,list指的是映射关系,即SQLite所用数据对应的表。

之后,litepal.xml中的list中需要引入省、市、县(区)的数据表,创建Province、City、County三个类作为数据表,即在三个类中分别创建get、set方法,用以获取各级行政单位的名称,最终通过互联网得出CityID。

设计系统需要通过互联网接入风力天气网,获取界面提供的天气数据,并在相应的界面中进行解析和显示。

[En]

The design system needs to access the wind weather network through the Internet, and obtain the weather data provided by the interface, and parse it and display it in the corresponding interface.

(1)数据请求部分的编码,为了使系统达到更高的稳定性和便捷性,本设计采用上文介绍的OkHttp协议进行互联网访问协议。首先,需要在工程中创建一个类,用以实现OkHttp的初始化方法定义,由于OkHttp框架的出色封装,只需要在此类中创建sendOkHttpRequest方法,访问互联网时只需要在相应的活动中调用该方法并传入对应参数即可。

(2)数据解析部分的编码,此设计系统访问和风天气网获取的数据格式为上文介绍的JSON格式数据,需要将JSON数据解析并显示。创建一个json包,在包内建立数据解析类,本系统共创建了七个解析类,分别解析接口时间数据、实时天气数据、未来六天预报数据、舒适度数据、小时天气数据、生活建议数据以及城市名称数据。七个类的解析格式基本一致,在此仅以小时天气为例,小时天气数据包含时间、晴雨状况、温度数据,因此创建一个名为today的类作为小时天气解析类,类中定义了三个字符串变量分别存放时间、晴雨、温度,最后在数据显示活动中调用三个字符串变量并将其显示在对应的位置。

另外,系统考虑到了这样一个事实,即在用户退出系统之后,再次退出系统之前,仍然需要显示该城市天气状况。因此,系统将由城市解析类解析的城市名称对应的 CityId 写入本地存储器中,当用户再次进入系统时从本地读取CityId。Android对于持久化数据存储上文提及了三种方法,即数据库、文件、SharedPreference。由于此部分数据简单,如果使用数据库过于繁琐,使用文件操作麻烦,而SharedPreference存储使用键值对的方式,读取简单,因此,本设计采用SharedPreference进行本地存储CityID。

后台数据更新顾名思义就是系统退出后任何会在后台访问和风天气接口并返回数据在页面上更新数据,Android的后台更新通常采用上文介绍的Service,将更新功能放在后台子线程,在程序退出后不会被销毁。首先,在Android工程目录下创建一个service包,并在包中创建一个AutoUpdateService类并继承Service类,将更新操作写入类中。

为了方便老年人和儿童用户快速查询天气情况,增强用户群体体验感,系统设计了语音播报和语音识别部分,可用于播报天气情况和语音识别切换城市。

[En]

In order to facilitate the elderly and child users to quickly query the weather conditions and enhance the sense of user group experience, the system has designed a voice broadcast and speech recognition part, which can be used to broadcast weather conditions and voice recognition to switch cities.

  1. 语音播报模块,由于目前Android版本已经更新至Android10.0,且市场上用户使用的手机大部分都在Android6.0以上版本,因此本系统采用Android6.0以上版本自带的语音播报模块SystemTTS。首先,需要在Androidmanifest开启扬声器权限,然后在Android项目工程的目录下创建SystemTTS类,类中包含声音配置方法、版本匹配方法、开始以及介绍播报方法。其中声音配置方法是配置播报语音的语速、音色等,版本匹配是检测Android版本是否处于Android6.0以上。
  2. 语音识别模块,由于Android没有提供很好的语音识别模块,所以语音识别部分需要借助一些提供Android语音识别的厂商提供的接口才能实现。目前国内市场上较为常见且技术比较成熟的人工智能服务提供商主要百度和科大讯飞。但是由于百度语音SDK占用内存稍大,且基本功能和科大讯飞无异,对于本设计系统而言,占用内存空间不适宜过大,因此本设计采用科大讯飞语音识别模块进行语音识别开发。

首先,本设计开发者需要注册为科大讯飞开发者平台开发人员,在科大讯飞开发者平台上创建自己的应用程序以获取APIKey,然后科大讯飞语音识别SDK和jar包导入本设计系统的项目目录,然后在主活动中调用SDK的语音识别方法,并传入APIkey和其他参数。导入jar包以及SDK的工程目录如图4-2所示。

基于Android的天气预报查询系统设计

软件演示

经过黑盒测试,本设计出现的问题基本得到解决。将编写完成的Android程序在Android Studio平台上运行,并命名为”和风细雨”后生成可以安装到Android手机上的APK文件,并在Android手机上安装。

Android手机上运行”和风细雨”软件,出现欢迎界面,欢迎页面如图5-1所示。

基于Android的天气预报查询系统设计

如果是第一次使用该软件,在欢迎界面之后会出现初始化设置城市界面,如果不是第一次使用,则会出现“微风细雨”主界面。城市设置界面如图5-2(1)所示,主界面如图5-2(2)所示。

[En]

If the software is used for the first time, the initialization setting city interface will appear after the welcome interface, and the “gentle breeze and drizzle” main interface will appear if it is not used for the first time. The city setting interface is shown in (1) in figure 5-2, and the main interface is shown in (2) in figure 5-2.

基于Android的天气预报查询系统设计

与其他天气预报软件只能用文字描述天气,只能手动切换城市天气不同,《微风细雨》天气预报系统的独特功能是,当用户进入到《微风细雨》主界面时,可以选择语音播报和语音识别在城市天气之间切换。通过语音功能,老人和孩子查询天气非常方便。语音识别功能界面如图5-3所示。

[En]

Unlike other weather forecast software, which only describes the weather in words and can only switch the city weather manually, the unique function of the “mild wind and drizzle” weather forecasting system is that when the user enters the main interface of “gentle wind and drizzle”, you can choose voice broadcasting and voice recognition to switch between urban weather. Through the voice function, it is very convenient for the elderly and children to query the weather. The voice recognition function interface is shown in figure 5-3.

基于Android的天气预报查询系统设计

Original: https://blog.csdn.net/weixin_40042248/article/details/115631388
Author: 楊木木8023
Title: 基于Android的天气预报查询系统设计

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/525075/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球