apk 安装

本文介绍如何利用XUtils库实现Android应用内的APK文件下载,并支持断点续传功能。通过设置请求参数和监听回调,实现了进度显示、暂停与取消下载、以及下载完成后自动安装等功能。

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

package bw.com.bw_day01_xutils.demo03;


import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ProgressBar;


import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x;


import java.io.File;


import bw.com.bw_day01_xutils.R;


@ContentView(value = R.layout.activity_down_load_apk)
public class DownLoadApkActivity extends AppCompatActivity {


    //初始化控件
    @ViewInject(value = R.id.pb_id)
    private ProgressBar mProgressBar;


    //下载的地址:
    private String apkUrl = "http://218.244.149.129:9010/download.php?apkid=12";


    //sd卡中存储的名称
    private String apkName = "hello.apk";


    //TODO 2, 断点续传中, 设置可以取消的任务
    private Callback.Cancelable cancelable;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        //引入注解
        x.view().inject(this);
    }


    //点击按钮, 下载apk, 存入sd中 -- 路径, 最后实现自动安装的功能
    @Event(value = {R.id.down_load_id,R.id.stop_load_id})
    private void onClick(View view)
    {


        switch (view.getId())
        {
            case R.id.down_load_id: // 点击下载


                //请求参数
                RequestParams params = new RequestParams(apkUrl);


                //TODO    1 ,  设置支持断点续传
                params.setAutoResume(true);//设置支持断点续传


                //存入sd中 -- 指定路径  getExternalCacheDir() 混存目录
                String filePath = getExternalCacheDir() + File.separator + apkName;
                //指定路径, 到网络请求参数中
                params.setSaveFilePath(filePath);


                //TODO  3, 断点续传中, 获取可以取消的任务
                cancelable = x.http().get(params, new Callback.ProgressCallback<File>() {


                    @Override
                    public void onLoading(long total, long current, boolean isDownLoading) {
                        // todo 正在加载的方法 -- 实时更新进度
                        int progress = (int)(current *100/total);//得到当前加载的进度
                        mProgressBar.setProgress(progress);
                    }


                    @Override
                    public void onSuccess(File file) {
                        // todo 加载成功  -- 最后的操作  -- 一定是下载成功了, 所有只需要安装即可
                        Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        DownLoadApkActivity.this.startActivity(intent);
                    }


                    @Override
                    public void onError(Throwable throwable, boolean b) {
                        // todo  加载失败
                    }
                    @Override
                    public void onCancelled(CancelledException e) {
                        // todo  取消方法
                    }
                    @Override
                    public void onFinished() {
                        // todo 完成的方法
                    }
                    @Override
                    public void onWaiting() {
                        // todo  等待的方法
                    }
                    @Override
                    public void onStarted() {
                        // todo  开始加载的方法
                    }
                });


                break;


            case R.id.stop_load_id: //点击暂停


                //TODO 4, 暂停下载
                cancelable.cancel();


                break;
        }


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值