天气APP是我们平时比较常用的一个APP,用来关注近期天气情况,给我们的出行安排提供便利。现在的手机一般都是自带有天气APP的,我的Mate20也有华为官方的天气。一开始的时候用着还挺好的,不知从何时起,华为的天气APP在启动的时候会显示广告,虽然看着很烦,但是还勉强能接受。后来,这个天气APP变本加厉,打开后里面到处都是广告,而且越来越臃肿,占用空间达到了211MB,一个天气应用真的需要占用这么大的空间吗,我决定自己动手写一个天气APP试试。我的手机是鸿蒙系统,API版本是6,所以我选择使用DevEco作为开发工具,因为API版本太低了,所以使用js和java作为开发语言,无法使用ets。
选择天气API
天气API有很多,针对不同的业务量有不同的收费方案,之前用的是彩云天气,免费,而且预报也比较准确,后来突然不能用了,去官网看到公告彩云天气不再免费了,所以只能换API。免费API里面做的比较好的是和风天气,和风天气提供的天气信息比较多,调用也简单,还提供了开源的丰富的天气图标供使用,所以选择了和风天气。
和风天气提供的天气信息有:
- 实时天气
- 分钟天气预报
- 逐小时天气预报
- 每日天气预报
- 天气预警
- 生活指数
- 空气质量
- 太阳和月亮信息
天气功能需求
-
多区域天气。打开APP时默认显示的是当前实时位置的天气预报,可左右滑动切换查看不同的区域天气。
-
添加区域天气。通过右上角的搜索按钮打开区域搜索页面,在搜索页面输入地区,点击搜索,显示匹配的区域列表。点击列表项添加到区域天气列表中。可在主页面左右滑动切换。
-
删除区域天气。在主页面对应的区域天气预报页,通过右上角的菜单按钮打开菜单,菜单中删除选项,点击删除从区域天气列表中移除当前区域。
-
天气内容。天气内容按从上到下分块展示,从上到下依次是:
- 实时天气。包括温度,天气,体感温度,湿度,风力。
- 降雨/降雪图。展示未来2小时的降雨/降雪量。
- 24小时天气。展示未来24小时的天气情况,包括时间,天气,温度,可左右滑动查看。
- 7日天气。展示包含今天在内的7天天气情况,包括星期,日间天气,夜间天气,最低温度,最高温度,温度条形图。
- 空气质量。包括总的空气质量和分项空气质量,总的天气质量以仪表盘的形式展示,根据空气质量等级以不同颜色区分。分项空气质量包括PM10,PM2.5,二氧化氮,二氧化硫,一氧化碳,臭氧,以分项名称,质量指数,条形图的形式展示。
- 太阳和月亮。以图表的形式展示太阳和月亮的轨迹,还有日出,日落,月升,月落的时间。
- 生活指数。展示当天的生活指数,如运动,洗车,穿衣等。
开发思路
- 申明权限,天气需要用到位置和网络权限,在config.json文件中配置对应的权限
- 在需要用到位置信息的地方申请权限
- 创建数据库和表,用于保存天气数据,不用频繁的调接口获取天气信息,接口一般都有次数限制。
- 创建一个DataAbility用于数据库操作,将天气数据的增删改查逻辑写好。一开始的是没有用DataAbility,使用的时候发现数据有时候对,有时候不对,因为不同的Context会创建不同的数据库,即使数据库名一样。
- 创建一个ServiceAbility用于页面数据交互,查询天气的时候优先从数据库中取,如果数据库中不存在,则调接口查询,如果存在,则判断是否超过有效期,如果超过,则重新调接口查询,如果没有超过,则直接使用数据库的数据。
- 创建一个Widget用于桌面小部件显示天气信息。
- 为了使应用体积尽可能的小,不使用第三方库,网络请求字节用java api写。不适用位图,使用矢量图,或者自己用canvas绘制。
成果展示
大小只有1.54MB,还可以,所以我把自带的华为天气给卸载了,用自己开发的这个轻量,满足需求,没有冗余功能,没有广告的天气APP。
现在越来越多的应用过于臃肿,动不动几百几千兆的大小,大量用户不需要的功能和关联的数据占用用户手机空间,部分应用将功能的使用权交给了用户,但没有将功能的存在交给用户去选择,我觉得还不够好。如果应用开发者不愿意去做,要么忍者,要么就另想他法。
那么,下一个要卸载的应用是谁呢?