Android11 下载APK并安装

本文介绍了在Android 11系统中如何下载并安装APK的步骤,包括监听按钮下载APK、配置AndroidManifest.xml以获取所需权限、创建文件路径配置以及编写安装功能代码。
摘要由CSDN通过智能技术生成

Android系统适用
1.下载
参考下载参考
引用的包 MainActivity.java

import androidx.appcompat.app.AppCompatActivity;

import android.app.DownloadManager;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.os.Process;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

定义一些等会用的变量,存储URL路径

    private Button force_button;
    private DownloadDialog downloadDialog;
    private DownloadManager mDownloadManager;
    private String url="https://xxx/files/xxx.apk";  //url路径

初始的时候监听button,是否进行点击

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        force_button=(Button) this.findViewById(R.id.force_button);		//button的id
        force_button.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                download();
            }
        });
    }

点击之后,开始新的线程,传入URL

    private void download(){
   
        showDialog();
        //最好是用单线程池,或者intentService取代
        new  Thread(new DownLoadRunnable(this,url,handler)).start();
    }

线程内容如下

    private class DownLoadRunnable implements Runnable {
   
        private String url;
        private Handler handler;
        private Context mContext;

        public DownLoadRunnable(Context context, String url, Handler handler) {
   
            this.mContext=context;
            this.url=url;
            this.handler=handler;
        }
        @Override
        public void run(){
   
            //设置线程优先级为后台,这样当多个线程并发后很多无关紧要的线程分配的CPU时间将会减少,有利于主线程的处理
            Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
            //具体下载方法
            startDownload();
        }

        private long startDownload() {
   
            //获得DownloadManager对象
            DownloadManager downloadManager=(DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
            //获得下载id,这是下载任务生成时的唯一id,可通过此id获得下载信息
            long requestId = downloadManager.enqueue(CreateRequest(url));
            //查询下载信息方法
            queryDownloadProgress(requestId,downloadManager);
            return requestId;
        }

        private void queryDownloadProgress(long requestId, DownloadManager downloadManager) {
   
            DownloadManager.Query query = new DownloadManager.Query();
            //根据任务编号id查询下载任务信息
            query.setFilterById(requestId);
            try{
   
                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值