开发这个应用的初衷是这样产生滴,和我一块租房的同学每天早上都是骑单车上班,所以手机闹钟就会定一个刚好适合骑车的起床时间点。但是呢,有一天早上起床以后发现外面下挺大雨,肯定是不能骑车去上班了,于是就只好坐公交了,可是起床的时间刚好够骑车不够坐公交呀,雨天又不好打车~~于是就华丽丽的迟到了~~
刚好我最近在自学android开发,然后就想到了做这么一个闹钟应用,可以根据当天天气的情况来决定闹钟触发的时间,如果下雨或者下雪的话就让它提前一个时间点,比如半个小时触发,这样的话骑车的同学就省了不少心,妈妈再也不用担心我因为起床晚而上班或者上学迟到了~~
话不多说,首先看成果物(程序员做的界面,大家懂得。。)
下面说一下开发过程中的整体技术思路和遇到的问题:
1.android闹钟的设定
android闹钟的设定使用了android的AlarmManager系统服务,根据用户输入的闹钟时间来进行系统闹钟的触发设定就好了。因为用户的输入比较简单,所以同时将用户设定的闹钟时间直接保存在xml中,方便随时获取。
定义自己的闹钟事件广播接收类receiver,当闹钟被触发使用该类进行监听。
2.城市定位以及天气情况获取
定位和获取天气情报,本来是打算分两步进行,自己编写城市定位的代码,然后通过获取到的城市名再去某一个api获取该城市的天气情况,但是网上找了半天没找到一个合适的获取天气情况的接口,真是一个难过的结果。后来有一天发现高德地图的api接口有天气接口,可以一步到位地获取城市以及天气情况,所以这个问题就轻松解决了。。。
3.特殊天气闹钟提前触发设定
至此就到了本应用最主要了逻辑处理处了,如何让它根据闹铃当日的天气情况自动判断闹钟触发的时间呢??
我的思路是这样的,在用户设定闹钟时间的时候正常情况下会给系统的AlarmManager服务注册一个用户设定的时间点的闹钟的循环触发服务,但是我将它修改为设定一个提前于用户设定的时间半小时(假定用户想提前半小时)的循环触发服务。
例如用户设定了8:00的闹钟,我就将它改为7:30,当7:30的时候我的广播接收类receiver收到了系统发的闹钟触发事件,然后2中提到的接口获取当前实时天气情况,如果是下雨下雪等特殊天气就让闹钟在此刻触发,闹铃立马响起。如果是正常天气就再向系统注册一个8:00的单次闹钟事件,receiver在8:00接受到该事件以后不进行天气判断而是直接触发闹铃。
至此,整个应用的核心功能就基本实现了。本人android菜鸟,思路和技术都没什么技术含量,所以代码就不上了,如果有想的不对的地方还请多多指点。