1. 程式人生 > >xUtils3帶進度條下載(切換介面不會中斷下載)

xUtils3帶進度條下載(切換介面不會中斷下載)

xUtils3的下載方法很方便提供了下載進度,首先,我們需要用程式碼註冊一個廣播接受者,用於接收下載進度,然後在xUtils3的下載方法裡傳送進度廣播即可。

廣播接收者:

private ProgressReceiver progressReceiver;
    /**
     * 用於通知遊戲下載進度的廣播接收者
     */
    private class ProgressReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            /*if (TextUtils.equals(intent.getAction(), "progress")) {

            }*/
// 辨別正在下載的遊戲是不是當前介面展示的遊戲 String downloadingGameId = intent.getStringExtra("gameId"); if (TextUtils.equals(gameId, downloadingGameId)) { if (mpb_download_progress.getVisibility() != View.VISIBLE) { mpb_download_progress.setVisibility(View.VISIBLE); } // 進度
int progress = intent.getIntExtra("progress", 0); mpb_download_progress.setProgress(progress); if (progress == 100) { // 下載完成 mpb_download_progress.setVisibility(View.GONE); view_step_to_two.setVisibility(View.VISIBLE); btn_open_game.setEnabled(true
); btn_open_game.setTextColor(getResources().getColor(R.color.white)); //下載完成 onDownloadFinished(); } } } }

註冊:

progressReceiver = new ProgressReceiver();
        IntentFilter progressFilter = new IntentFilter("progress");
        registerReceiver(progressReceiver, progressFilter);

銷燬:

if (progressReceiver != null) {
            unregisterReceiver(progressReceiver);
        }

下載方法:

private final Executor executor = new PriorityExecutor(2, true);
    /**
     * 下載遊戲,這個方法在Activity銷燬之後仍會繼續執行
     */
    private void downloadGame() {
        if (TextUtils.isEmpty(gameUrl)) {
            ToastUtils.showShort(mActivity, "遊戲下載地址為空");
            return;
        }

        if (!TextUtils.isEmpty(gameLocalPath)) {
            org.xutils.http.RequestParams params = new org.xutils.http.RequestParams(gameUrl);
            params.setAutoRename(true);
            params.setAutoResume(true);
            params.setAutoResume(true);
            params.setAutoRename(false);
            params.setSaveFilePath(gameLocalPath);
            params.setExecutor(executor);
            params.setCancelFast(true);

            x.http().get(params, new Callback.ProgressCallback<File>() {

                @Override
                public void onWaiting() {

                }

                @Override
                public void onStarted() {

                }

                @Override
                public void onLoading(long total, long current, boolean isDownloading) {
                    // 下載進度
                    Intent intent = new Intent("progress");
                    intent.putExtra("progress", (int)(current*100/total));
                    intent.putExtra("gameId", gameId);
                    sendBroadcast(intent);
                }

                @Override
                public void onSuccess(File result) {

                }

                @Override
                public void onError(Throwable ex, boolean isOnCallback) {

                }

                @Override
                public void onCancelled(CancelledException cex) {

                }

                @Override
                public void onFinished() {

                }
            });
        }
    }