app内下载apk修改。

This commit is contained in:
2025-12-15 14:22:09 +08:00
parent 14782341f9
commit 5fb367e321

View File

@@ -1,16 +1,21 @@
package com.xscm.moduleutil.utils; package com.xscm.moduleutil.utils;
import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.os.Environment; import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import android.util.Log; import android.util.Log;
import com.alibaba.android.arouter.utils.TextUtils; import com.alibaba.android.arouter.utils.TextUtils;
import com.blankj.utilcode.util.FileUtils; import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ThreadUtils; import com.blankj.utilcode.util.ThreadUtils;
import com.blankj.utilcode.util.ToastUtils;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@@ -18,8 +23,12 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Objects;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody; import okhttp3.ResponseBody;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
@@ -42,18 +51,60 @@ public class DownloadUtil {
private static final String PATH_AUDIO = Environment.getExternalStorageDirectory() + "/qipao/audio"; private static final String PATH_AUDIO = Environment.getExternalStorageDirectory() + "/qipao/audio";
public DownloadUtil(Context context,String downUrl) { @SuppressLint("CheckResult")
this.mContext = context; public DownloadUtil(Context context, String downUrl) {
// 1. 判空,避免空指针
if (mApi == null) { if (context == null) {
//初始化网络请求接口 ToastUtils.showShort("Context 不能为 null");
mApi = ApiHelper.getInstance().createService(ApiInterface.class); LogUtils.e("Context 不能为 null."+(mApi == null));
int i = downUrl.lastIndexOf('/');//一定是找最后一个'/'出现的位置 return;
if (i != -1) {
downUrl = downUrl.substring(i);
}
mApkPath = new File(Objects.requireNonNull(mContext.getExternalFilesDir(PATH_APK+"_"+downUrl)).getAbsolutePath()).getAbsolutePath();
} }
if (downUrl == null || downUrl.trim().isEmpty()) {
ToastUtils.showShort("下载链接不能为 null 或空!");
LogUtils.e("下载链接不能为 null 或空!."+(mApi == null));
return;
}
this.mContext = context;
final String dUrl = downUrl;
File qipaoDir = new File(mContext.getFilesDir(), "qipao");
if (qipaoDir.exists() && qipaoDir.isDirectory()) {
Observable.create(new ObservableOnSubscribe<Boolean>() {
@Override
public void subscribe(ObservableEmitter<Boolean> emitter) throws Exception {
LogUtils.e("删除文件中."+(mApi == null));
FileUtils.deleteAllInDir(qipaoDir);
emitter.onNext(true);
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {
LogUtils.e("删除成功."+(mApi == null));
if (mApi == null) {
//初始化网络请求接口
mApi = ApiHelper.getInstance().createService(ApiInterface.class);
int i = dUrl.lastIndexOf('/');//一定是找最后一个'/'出现的位置
String downUrlEnd = "";
if (i != -1) {
downUrlEnd = dUrl.substring(i);
if (downUrlEnd.contains("/")) {
downUrlEnd = downUrlEnd.replace("/", "");
}
}
mApkPath = new File(mContext.getFilesDir(), PATH_APK + downUrlEnd).getAbsolutePath();
}
});
} else {
if (mApi == null) {
//初始化网络请求接口
mApi = ApiHelper.getInstance().createService(ApiInterface.class);
int i = downUrl.lastIndexOf('/');//一定是找最后一个'/'出现的位置
if (i != -1) {
downUrl = downUrl.substring(i);
}
mApkPath = new File(mContext.getFilesDir(), PATH_APK + downUrl.replace("/", "")).getAbsolutePath();
}
}
} }
public void downloadVoiceFile(String url, final DownloadListener downloadListener) { public void downloadVoiceFile(String url, final DownloadListener downloadListener) {