開發這個應用的初衷是這樣產生滴,和我一塊租房的同學每天早上都是騎單車上班,所以手機鬧鍾就會定一個剛好適合騎車的起床時間點。但是呢,有一天早上起床以后發現外面下挺大雨,肯定是不能騎車去上班了,於是就只好坐公交了,可是起床的時間剛好夠騎車不夠坐公交呀,雨天又不好打車~~於是就華麗麗的遲到了~~
剛好我最近在自學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菜鳥,思路和技術都沒什么技術含量,所以代碼就不上了,如果有想的不對的地方還請多多指點。
源碼下載地址:鏈接: http://pan.baidu.com/s/1c0rOiAk 密碼: 6nbr