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

MaiOldham 8年前發布 | 28K 次閱讀 Android開發 移動開發

就看天氣――是一款遵循Material Design風格的只看天氣的APP。無流氓權限,無自啟,xxx,用最少的權限做最優的體驗。

使用說明:

  • 卡片展現(當前天氣情況,未來幾小時天氣情況,生活建議,一周七天概況)

  • 補全城市(第一版本因為自己偷懶所以城市有缺陷對不起各位)

  • 自動定位

  • 緩存數據,減少網絡請求,保證離線查看

  • 內置兩套圖標(設置里更改)

  • 彩蛋(自動夜間狀態)

權限說明

    <!--用于進行網絡定位-->
    <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 地理定位服務: 高德地圖

開源技術

  1. Rxjava

  2. RxAndroid

  3. Retrofit

  4. GLide

  5. ASimpleCache

簡單介紹代碼

網絡

就看天氣的網絡部分的支持是用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://weibo.com/xcc3641

個人博客: http://IMXIE.CC


項目地址: https://github.com/xcc3641/SeeWeather

 本文由用戶 MaiOldham 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!