androidstuido_schooltest_8_Network

该博客主要展示了如何在Android应用中实现从指定URL下载APK文件,并使用ProgressDialog显示下载进度。通过HttpURLConnection进行网络请求,读取文件流并写入本地存储,同时在主线程中更新下载进度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MainActivity.java

package com.kanxue.school_test_2;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    //进度条
    private ProgressDialog dialog;
    //apk File
    private File apkFile;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void downloadApk(View view){
        //Toast.makeText(this, "下载apk", Toast.LENGTH_SHORT).show();
        //启动异步任务处理
        new AsyncTask<Void,Integer,Void>(){
            //主线程中显示进度条


            @Override
            protected void onPreExecute() {
                dialog = new ProgressDialog(MainActivity.this);
                dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                dialog.show();
                //设置下载文件的保存路径 /stroage/sdcard/Android/pageckage_name/files/xxx.apk
                apkFile = new File("/data/local/tmp/","update.apk");
            }

            @Override
            protected Void doInBackground(Void... voids) {
                try {
                    //1.下载地址
                    String path = "http://192.168.31.65:8080/kgb-messenger.apk";
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //2.设置
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(10000);
                    //3.连接
                    connection.connect();
                    //4.请求并响应
                    int responsecode = connection.getResponseCode();
                    if(responsecode == 200){
                        //设置dialog的最大进度
                        dialog.setMax(connection.getContentLength());//apk文件大小 总字节数
                        //5.得到apk文件流
                        InputStream is = connection.getInputStream();
                        //6.创建输出流
                        FileOutputStream fos = new FileOutputStream(apkFile);
                        //7.边读边写
                        byte[] buffer = new byte[1024];
                        int len = -1;
                        while((len = is.read(buffer))!=-1){
                            fos.write(buffer,0,len);
                            //8.更新进度
                            publishProgress(len);
                            //暂停50毫秒
                            SystemClock.sleep(50);
                        }
                        //关闭流
                        fos.close();
                        is.close();
                    }
                    //9.下载完成后关闭网络连接
                    connection.disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
            //下载完成后更新主界面
            @Override
            protected void onPostExecute(Void aVoid) {
                dialog.dismiss();
            }
            //主线程中不断去更新进度

            @Override
            protected void onProgressUpdate(Integer... values) {
                dialog.incrementProgressBy(values[0]);
            }
        }.execute();
    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="35dp"
        android:text="下载最新版本APK"
        android:onClick="downloadApk"/>

</RelativeLayout>

output:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值