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{