Android - app應(yīng)用下載(進度條顯示)

效果如下圖:


進度條下載.gif

布局 文件

  • activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <Button
        android:id="@+id/bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="支付" />

</LinearLayout>

UI 文件

  • HomeActivity.java
public class HomeActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TAG = "HomeActivity";
    /**
     * 下載
     */
    private Button mBtn;
    private ProgressBar mPgb;
    private TextView mTv;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        initView();

    }


    private void initView() {
        mBtn = (Button) findViewById(R.id.btn);
        mBtn.setOnClickListener(this);
        mPgb = (ProgressBar) findViewById(R.id.pgb);
        mTv = (TextView) findViewById(R.id.tv);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.btn:
                initDownload();
                break;
        }
    }

    private void initDownload() {

        OkHttpClient okHttpClient = new OkHttpClient.Builder().build();

        Request request = new Request.Builder()
                .url("http://cdn.banmi.com/banmiapp/apk/banmi_330.apk")
                .get()
                .build();

        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("tag", "onFailure: " + e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                ResponseBody body = response.body();        // 獲取到請求體
                InputStream inputStream = body.byteStream();    // 轉(zhuǎn)換成字節(jié)流
                saveFile(inputStream, Environment.getExternalStorageDirectory() + "/" + "qq.apk", body.contentLength());
            }
        });

    }


    /**
     * @param inputStream
     * @param s           存放的地址
     * @param l           文件的長度
     */
    private void saveFile(InputStream inputStream, String s, final long l) {
        long count = 0;
        try {
            // 獲取到輸出流挪鹏,寫入到的地址
            FileOutputStream outputStream = new FileOutputStream(new File(s));
            int length = -1;
            byte[] bytes = new byte[1024 * 10];
            while ((length = inputStream.read(bytes)) != -1) {
                // 寫入文件
                outputStream.write(bytes, 0, length);
                count += length;

                final long finalCount = count;
                final int finalLenght = length;
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mPgb.setMax((int) l);       // 設(shè)置進度條最大值
                        mPgb.setProgress((int) finalCount);     // 設(shè)置進度
                        mTv.setText((int) (100 * finalCount / l) + "%");  // 設(shè)置進度文本 (100 * 當前進度 / 總進度)
                    }
                });
                Log.e("tag", "progress" + count + "max" + l);
            }
            inputStream.close();        // 關(guān)閉輸入流
            outputStream.close();       // 關(guān)閉輸出流
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // 如果寫入的進度值完畢,Toast
                    Toast.makeText(HomeActivity.this, "下載完成", Toast.LENGTH_SHORT).show();
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愉烙,一起剝皮案震驚了整個濱河市讨盒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌步责,老刑警劉巖返顺,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔓肯,居然都是意外死亡遂鹊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門蔗包,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秉扑,“玉大人,你說我怎么就攤上這事调限≈勐剑” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵耻矮,是天一觀的道長秦躯。 經(jīng)常有香客問我,道長裆装,這世上最難降的妖魔是什么踱承? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮哨免,結(jié)果婚禮上勾扭,老公的妹妹穿的比我還像新娘。我一直安慰自己铁瞒,他們只是感情好妙色,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慧耍,像睡著了一般身辨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芍碧,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天煌珊,我揣著相機與錄音,去河邊找鬼泌豆。 笑死定庵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔬浙,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼猪落,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了畴博?” 一聲冷哼從身側(cè)響起笨忌,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俱病,沒想到半個月后官疲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡亮隙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年途凫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溢吻。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡颖榜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出煤裙,到底是詐尸還是另有隱情掩完,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布硼砰,位于F島的核電站且蓬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏题翰。R本人自食惡果不足惜恶阴,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豹障。 院中可真熱鬧冯事,春花似錦、人聲如沸血公。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽累魔。三九已至摔笤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垦写,已是汗流浹背吕世。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梯投,地道東北人命辖。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓况毅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尔艇。 傳聞我的和親對象是個殘疾皇子尔许,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容