就看天氣――是一款遵循Material Design風格的只看天氣的APP

使用說明:
-
卡片展現(當前天氣情況,未來幾小時天氣情況,生活建議,一周七天概況)
-
補全城市(第一版本因為自己偷懶所以城市有缺陷對不起各位)
-
自動定位
-
緩存數據,減少網絡請求,保證離線查看
-
內置兩套圖標(設置里更改)
-
彩蛋(自動夜間狀態)
權限說明
<!--用于進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!--用于訪問GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!--獲取運營商信息,用于支持提供運營商信息相關的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!--用于訪問wifi網絡信息,wifi信息會用于進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!--這個權限用于獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <!--用于訪問網絡,網絡定位需要上網--> <uses-permission android:name="android.permission.INTERNET"/> <!--用于讀取手機當前的狀態--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!--寫入擴展存儲,向擴展卡寫入數據,用于寫入緩存定位數據--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
版本更新&&下載地址
Fir.im: http://fir.im/seeWeather
豌豆莢:http://www.wandoujia.com/apps/com.xiecc.seeWeather
魅族應用中心: http://developer.meizu.com/console/apps/detail/6530883
酷安市場:http://www.coolapk.com/apk/com.xiecc.seeWeather
v2.0
-
重構代碼,全新UI,升級體驗
-
就看天氣――是一款遵循Material Design風格的只看天氣的APP。無流氓權限,無自啟,xxx,用最少的權限做最優的體驗。
-
卡片展現(當前天氣情況,未來幾小時天氣情況,生活建議,一周七天概況)
-
彩蛋(自動夜間狀態)
-
補全城市(第一版本因為自己偷懶所以城市有缺陷對不起各位)
-
緩存數據,減少網絡請求,保證離線查看
-
內置兩套圖標(設置里更改)
v1.1
-
加固
-
兼容更多系統版本
v1.0
-
就看天氣V1.0
-
@圖片和信息來源于網絡,侵權刪
公開 API
天氣數據來源于:和風天氣 城市信息來源于:CSDN 地理定位服務: 高德地圖
開源技術
簡單介紹代碼
網絡
就看天氣的網絡部分的支持是用RxJava+RxAndroid+Retrofit+Gson再加上ACache緩存
/** * <p/> * 首先從本地緩存獲取數據 * if 有 * 更新UI * else * 直接進行網絡請求,更新UI并保存在本地 */ private void fetchData() { observer = new Observer<Weather>() { //節約篇幅,已省略 ... }; fetchDataByCache(observer); } /** * 從本地獲取 */ private void fetchDataByCache(Observer<Weather> observer) { Weather weather = null; try { weather = (Weather) aCache.getAsObject("WeatherData"); } catch (Exception e) { Log.e(TAG, e.toString()); } if (weather != null) { //distinct去重 Observable.just(weather).distinct().subscribe(observer); } else { fetchDataByNetWork(observer); } } /** * 從網絡獲取 */ private void fetchDataByNetWork(Observer<Weather> observer) { String cityName = mSetting.getString(Setting.CITY_NAME, "重慶"); RetrofitSingleton.getApiService(this) .mWeatherAPI(cityName, key) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) ////節約篇幅,已省略 ... }
RecycerVIew展示
該項目中用到RecyclerView中級的用法是根據itemType展示不同的布局,這就是主頁核心的代碼了。
@Override public int getItemViewType(int position) { if (position == TYPE_ONE) { //標識 ... } return super.getItemViewType(position); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_ONE) { //綁定 ... } } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof NowWeatherViewHolder) { //更新布局 .... } }
簡書:http://www.jianshu.com/users/3372b4a3b9e5/latest_articles
知乎:https://www.zhihu.com/people/xcc3641.github.io
個人博客: http://IMXIE.CC