-
课
程
设
p>
计
报
告
课程名称
:
移动平台开发
设计题目:
天气预报
院
系:
计算机科学与工程学院
专
业:
计算机科学与技术
班
级:
学
号:
姓
名:
指导教师:
孙
霞
设计地点:
N6-113
开课时间:
2016
至
2017
学年第
1
学期
目录
1.
引言
..................................................
..................................................
..................................................
1
1.1.
题目描述
.......................
..................................................
..................................................
........... 1
1.2.
设计意义
.......................
..................................................
..................................................
........... 1
2.
开发环境
.......................
..................................................
..................................................
................... 1
2.1.
硬件环境
.......................
..................................................
..................................................
........... 1
2.2.
软件环境
.......................
..................................................
..................................................
........... 1
3.
相关技术及知识点
....................
..................................................
..................................................
....... 2
3.1.
Activity
...................
..................................................
..................................................
............... 2
3.2.
Service
....................
..................................................
..................................................
................ 2
3.3.
网络通信
.......................
..................................................
..................................................
........... 3
4.
需求分析
.......................
..................................................
..................................................
................... 3
4.1.
系统功能需求分析
.
..............................................
..................................................
...................... 3
4.2.
系统流程图
......................
..................................................
..................................................
........ 4
4.3.
系统界面需求分析
.
..............................................
..................................................
...................... 4
4.4.
系统性能需求分析
.
..............................................
..................................................
...................... 4
5.
设计与实现
......................
..................................................
..................................................
................ 5
5.1.
界面布局
.......................
..................................................
..................................................
........... 5
5.2.
省市二级联动
.............................................
..................................................
................................ 6
5.3.
获取天气数据
.............................................
..................................................
................................ 9
5.4.
播放背景音乐
.............................................
..................................................
.............................. 13
6.
个人总结
.......................
..................................................
..................................................
................. 14
参考资料
.......................
..................................................
..................................................
......................... 15
1.
引言
1.1.
题目描述
本次实验是开发一款基于<
/p>
Android
平台的天气预报应用,
将
网络系统的功能扩展到智能手机终
端上,让手机能够通过移动网络访问
< br>Web
网站并处理各种各样的业务,可以让智能手机用户能够
随时随地查询互联网所提供的天气信息。
1.2.
设计意义
可以让广大
Android
手机用户能够在第一时间获取最新的天气预报信息,
以便提前预防,
方便
出行。同时,把气象灾害造成
的损失降到最低,也可以提高公共服务质量,更好的发挥气象事业对
经济社会发展的现实
性作用,有巨大的实用价值。
虽然该技术在
Android
p>
平台已经比较成熟,
但是
通过该软件的开发
仍然能帮助我更好的认识
Android
系统的工作原理。
p>
2.
开发环境
2.1.
硬件环境
戴尔灵越笔记本电脑
2.2.
软件环境
Android
的上层应用程序是用
Java
语言开发的,一般情
况下是基于
Dalvik
虚拟机的,所以
Google
公司推荐使用主流的
Java
< br>集成开发环境
Eclipse
。而用
Java
语言进行开发,需要用到
SUN
< br>公司提供的
Java
SDK(
其中包括
JRE
:
Java
Runtime
Environment)
< br>。此外,
Android
的应用程
序开发和
Java
开发有较大区别的,需要使用
Google
提供的
Android
SDK
。同时,要在
Eclipse
上安装
ADT
,为
Andro
id
开发提供开发工具的升级或者变更,是
Eclipse
p>
下开发工具的升级或下载
的工具。
简言之,需要以下软件,才能搭建
A
ndroid
开发环境,从而进行
Android
应用程序的开发。
(1)
Java
SDK
(2)
Eclipse
(3)
Android
SDK
(4)
ADT
1
3.
相关技术及知识点
3.1.
Activity
应用程序中,一个
Activity
通常就是
一个单独的屏幕,它上面可以显示一些控件也可以监听
并处理用户的事件做出响应。
p>
Activity
之间通过
Intent
进行通信。在
Intent
的描述结构中,有两个最重要的部分:动作
和动作对应的数据。
典型的动作类型有:
M AIN
(
activity
的门户)、
VIEW
、
PICK
、
EDIT
等。而动作对应的数据
则以
URI <
/p>
的形式进行表示。例如:要查看一个人的联系方式,
你需要创建一
个动作类型为
VIEW
的
inten
t
,以及一个表示这个人的
URI
。<
/p>
与之有关系的一个类叫
IntentF
ilter
。相对于
intent
是一个有效的做某事的请求,一个
intentfilter
则用于描述一个
activity
(或
者
IntentReceiver
)能够操作哪些
intent
。一个
activity
如果要显示一个人的联系方式时,需要声明一个
IntentFilter
,这个
IntentFilter
要
知道怎么去处理
VIEW
动作和表示一个人的
URI
。
< br>IntentFilter
需要在
< br>中
定义。
通过解析各种
inte
nt
,
从一个屏幕导航到另一个屏幕是很简单的。
当向前导航时,
activity
将会调用
startActivity(Intent myI
ntent)
方法。然后,系统会在所有安装的应用程序中定义的
IntentFilter
中查找,
找到最匹配
myIntent
的
Intent
对应的
activity
。
新的
a
ctivity
接收到
myIntent
的通知后,开始运行。当
startActivity
方法被调用将触发解析
myIntent
的动作,这
个机制提供了两个关键好处:
A
、
Activities
能够重复利用从其它组件中以
Intent
的形式产生的一个请求;
B
、
Activities
可以在任何时候被一个具有相同
IntentFilter
的新的
Activity
取代。
3.2.
Service
一个
Service
是一段长生命周
期的,没有用户界面的程序,可以用来开发如监控类程序。
比
较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。
在一个媒体播放器的
应
用中,应该会有多个
activity
,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并
没有对应的
activity
,因为使用者当然会认为在导航到其它屏幕时音乐应该
还在播放的。在这个
例子中,媒体播放器这个
activity
会使用
ervice()
来启动一个<
/p>
service
,从而可
以在后台保持音
乐的播放。同时,系统也将保持这个
service
一直执行,直到这个
service
运行
结束。另外,我们还可以通过使用
rvice()
方法,连接到一个
service
上(如果这
个
service
还没有运行将启动它)。当连接到一个
service
之后,我们还可以
service
提
供的接
口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作
。
2
Service
使用步骤如下
:
(
1
)继承
service
类;
(
2
)
p>
配置清单文件中
节点里对服务进行配置
。
服务不能自己运行
p>
,
需要通过
ervice()
或
rvice()
启动服务
通过
startService()
方
法启动的服务于调用者没有关系
,
即使调用者关闭了
,
服务仍然运行想停止
服务要调用
rvice(),
此时系统会调用
onDestory
(),
使用此方法启动时
,
服务首次<
/p>
启动系统先调用服务的
onCreate()-->onStar
t(),
如果服务已经启动再次调用只会触发
onStart(
)
方法。
使用
bindService()
启动的服务与调用者绑定
,
p>
只要调用者关闭服务就终止
,
使用此方法启
动时
,
服务首次启动系统先调用服务的
onCreate()-->onBind(),
如果服务已经启动再次调用不会再触发
这
2
个方法
,
调用者退出时系统会调用服务的
onUnbind()-->o
nDestory(),
想主动解除绑定可使用
Service
(),
系统依次调用
onUnbind()-->onDest
ory()
。
3.3.
网络通信
JSON
数据解析:
(
1
)
JavaScript
Object
Notation
是一种轻量级的数据交换格式;
(
2
)
Android
API
中直接支持对
JSON
数据的处
理;
(
3
)
常用类
JSONObject
、
JSO
NArray
、
JSONStringer
和
JSONTokener
等;
(
4
)数据在名称
/
值对中、数据由逗号分隔、花括号保存对象、方括号保存数组。
< br>
HttpURLConnection
:
提供了基于
HTTP
的网
络访问方法,主要的操作步骤为:
(
1
)利用
URL
地址实例化
URL
类;
(
2
)由
URL
类创建<
/p>
HttpURLConnection
对象;
(
3
)以
GET/POST
方式向服务器发送请求;
(
4
)接收服务器响应。
4.
需求分析
4.1.
系统功能需求分析
(
1
)
能够由用户设置省份城市;
(
2
)
p>
根据用户设置的城市,点击刷新按钮获取当地当天的日期、天气信息以及未来六天的天气
p>
情况。
(
3
)
以淡入淡出的方式显示主页面;
(
4
)
p>
打开软件时可以自动播放音乐,用户可以在
Menu
菜单里选择关闭音乐;
(
5
)
Menu
菜单里可以查看开发者信息。
3
4.2.
系统流程图
打开软件
界面启动
网络连接
是
进入主界面
播放音乐
选择城市
刷新天气
结束
图
4-1
系统流程图
否
4.3.
系统界面需求分析
目前国内软件开发
者在设计过程中很注重软件的开发技术及其具有的业务功能,
而忽略了用户
对软件界面的需求,影响软件的易用性、友好性。
界面设计要简约、美观,不
能太复杂,让用户操
作起来太繁琐,
影响用户的使用体验,
p>
要在交互性与应用性上让用户感到舒适,
让用户
准确、
高效、
轻松、愉快地完成天气的查询
,所以软件的友好性、易用性对软件系统至关重要。
4.4.
系统性能需求分析
软件在完成功能需
求之后,
还要进一步的优化,
不能占用手机太多的内存资源,<
/p>
在交互性上使
用户获得最佳感受,让使用不同手机设备的用户都能
有良好地体验。
4
5.
设计与实现
5.1.
界面布局
在页面的布局上,因为界面
设计的比较简单,
所以只使用了基础的横向布局和纵向布局,
横
向
布局与纵向布局交替使用,完成了天气预报的界面设计。
图
5-1
界面布局
图
5-2
软件主界面
5
图
5-3
启动界面
图
5-4
天气信息界面
图
5-5
刷新界面
图
5-6
作者信息界面
5.2.
省市二级联动
将老师给的中国省市的
编号手动输入到
文件中,再定义省份和城市编号两个数
6
组,再定义
Ar
rayAdapter
,在两个下拉框上分别放上监听器,将省份与城市进行绑定,将所
选择
的城市的城市编号存放到一个数组之中,以便之后进行天气信息的获取。
关键代码:
private
int
[]
cities
= {
.
beijing
,
.
tianjin
,
.
hebei
,.
shanxi1
, .
neimenggu
,
.
liaoning
,
.
jilin
, .
< br>heilongjiang
,.
shanghai
,.
jiangsu
,
.
zhejiang
,
.
anhui
, .
fujian
p>
,.
jiangxi
,
.
shandong
,
.
henan
, .
hubei
,.
hunan
,
.
guangdong
,
.
guangxi
, .
hainan
,.
chongqing
,
.
sichuan
, .
guizhou
,.
yunnan
< br>, .
xizang
,
.
shanxi3
, .
gansu
,.
qinghai
, .
ningxia
,
.
xinjiang
, .
taiwan
,.
xianggang
};
private
int
[]
citycode
= {
.
bei_jing
,
.
tian_jin
,
.
he_bei
,
.
shan_xi1
,
.
nei_meng_gu
,
.
liao_ning
,
.
ji_lin
,
.
hei_long_jiang
,
.
shang_hai
,
.
jiang_su
,
.
zhe_jiang
,
.
an_hui
,
.
fu_jian
,
.
jiang_xi
,
.
shan_dong
,
.
he_nan
,
.
hu_bei
,
.
hu_nan
,
.
guang_dong
,
.
guang_xi
,
.
hai_nan
,
.
chong_qing
,
.
si_chuan
,
.
gui_zhou
,
.
yun_nan
,
.
xi_zang
,
.
shan_xi3
,
.
gan_su
,
.
qing_hai
, .
ning_xia
,.
xin_jiang
,.
tai_wan
,
.
xiang_gang
};
img
1
.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
//
TODO
Auto-
generated method stub
r
builder =
new
r(
WeatherActivity.
this
);
le(
<
/p>
请选择所属城市
);
View v1 =
LayoutInflater.
from
(WeatherActivity.
this
).inflate(
.
activity_cities
,
null
);
sp1
= (Spinner)
ewById(.
spinner1
);
sp2
= (Spinner)
ewById(.
spinner2
);
p>
sp1
.setOnItemSelectedListener(
new
OnItemSelectedListener() {
@Override
public
void
onItemSelected(AdapterView> parent,
7