1. 程式人生 > >Android xUtils3下載檔案的使用

Android xUtils3下載檔案的使用

xUtils3簡介
  xUtils 包含了orm, http(s), image, view註解, 但依然很輕量級(246K), 並且特性強大, 方便擴充套件:

  1. 穩定的基石: AbsTask和統一的回撥介面Callback, 任何異常, 即使你的回撥方法實現有異常都會進入onError, 任何情況下onFinished總會讓你知道任務結束了.
  2. 基於高效穩定的orm工具, http模組得以更方便的實現cookie(支援domain, path, expiry等特性)和 快取(支援Cache-Control, Last-Modified, ETag等特性)的支援.
  3. 有了強大的http及其下載快取的支援, image模組的實現相當的簡潔, 並且支援回收被view持有, 但被Mem Cache移除的圖片, 減少頁面回退時的閃爍.
  4. view註解模組僅僅400多行程式碼卻靈活的支援了各種View注入和事件繫結, 包括擁有多了方法的listener的支援.

本文基於xUtils3實現從伺服器下載檔案(Apk)的功能,其中,xUtils3網路模組大大方便了在實際開發中網路模組的開發,xUtils3網路模組大致包括GET請求、POST請求、如何使用其他請求方式、上傳檔案、下載檔案、使用快取等功能,下面將對下載檔案進行使用說明::

  1. 整合xUtils3,使用Gradle構建時新增一下依賴即可

    compile 'org.xutils:xutils:3.5.0'

  2. 加入所需要的許可權宣告;

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  3. 初始化建立建Application,並在AndroidManifest.xml檔案中進行配置
public class MyMobileApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
        x.Ext.setDebug(BuildConfig.DEBUG); // 是否輸出debug日誌, 開啟debug會影響效能.
    }
}

  AndroidManifest.xml檔案中配置如下:

    <application
        android:name=".MyMobileApplication"
        ......
        android:theme="@style/AppTheme">

        <activity android:name=".activity.SplashActivity">
            ......
        </activity>
    </application>
  1. 下載功能的實現,這裡以下載我們自己Tomcat上的Apk為例進行說明
    /**
     * 下載伺服器端更新後最新的apk
     */
    private void downloadUpdateApk() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            mProgressDialog = new ProgressDialog(SplashActivity.this);
            String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
            // mDownloadUrl為JSON從伺服器端解析出來的下載地址
            RequestParams requestParams = new RequestParams(mDownloadUrl);
            // 為RequestParams設定檔案下載後的儲存路徑
            requestParams.setSaveFilePath(path);
            // 下載完成後自動為檔案命名
            requestParams.setAutoRename(true);
            x.http().get(requestParams, new Callback.ProgressCallback<File>() {

                @Override
                public void onSuccess(File result) {
                    Log.i(tag, "下載成功");
                    mProgressDialog.dismiss();
                }

                @Override
                public void onError(Throwable ex, boolean isOnCallback) {
                    Log.i(tag, "下載失敗");
                    mProgressDialog.dismiss();
                }

                @Override
                public void onCancelled(CancelledException cex) {
                    Log.i(tag, "取消下載");
                    mProgressDialog.dismiss();
                }

                @Override
                public void onFinished() {
                    Log.i(tag, "結束下載");
                    mProgressDialog.dismiss();
                }

                @Override
                public void onWaiting() {
                    // 網路請求開始的時候呼叫
                    Log.i(tag, "等待下載");
                }

                @Override
                public void onStarted() {
                    // 下載的時候不斷回撥的方法
                    Log.i(tag, "開始下載");
                }

                @Override
                public void onLoading(long total, long current, boolean isDownloading) {
                    // 當前的下載進度和檔案總大小
                    Log.i(tag, "正在下載中......");
                    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    mProgressDialog.setMessage("正在下載中......");
                    mProgressDialog.show();
                    mProgressDialog.setMax((int) total);
                    mProgressDialog.setProgress((int) current);
                }
            });
        }
    }

程式執行示例圖如下:

這裡寫圖片描述

參考文章: