diff --git a/app/src/main/java/com/gh/download/simple/SimpleDownloadManager.kt b/app/src/main/java/com/gh/download/simple/SimpleDownloadManager.kt index 9d24da4f47..802fe6c934 100644 --- a/app/src/main/java/com/gh/download/simple/SimpleDownloadManager.kt +++ b/app/src/main/java/com/gh/download/simple/SimpleDownloadManager.kt @@ -4,7 +4,7 @@ import com.lg.download.* import com.lg.ndownload.DownloadConfig import com.lg.ndownload.DownloadDbManager import com.lg.ndownload.DownloadQueue -import com.lightgame.download.FileUtils +import com.gh.gamecenter.common.utils.FileUtils import java.util.concurrent.ExecutorService import java.util.concurrent.Executors diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 351871df61..c90f04f7b1 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -114,8 +114,6 @@ import com.google.gson.reflect.TypeToken; import com.halo.assistant.HaloApp; import com.lightgame.download.DownloadEntity; import com.lightgame.download.DownloadStatus; -import com.lightgame.download.FileUtils; -import com.lightgame.utils.AppManager; import com.lightgame.utils.Utils; import com.sina.weibo.sdk.auth.AuthInfo; import com.sina.weibo.sdk.openapi.IWBAPI; diff --git a/app/src/main/java/com/gh/gamecenter/update/UpdateHelper.kt b/app/src/main/java/com/gh/gamecenter/update/UpdateHelper.kt index bd35e1a68a..69bd855535 100644 --- a/app/src/main/java/com/gh/gamecenter/update/UpdateHelper.kt +++ b/app/src/main/java/com/gh/gamecenter/update/UpdateHelper.kt @@ -21,8 +21,8 @@ import com.gh.gamecenter.retrofit.RetrofitManager import com.gh.ndownload.NDataChanger import com.halo.assistant.HaloApp import com.lightgame.download.DownloadEntity -import com.lightgame.download.FileUtils import com.lightgame.utils.AppManager +import com.gh.gamecenter.common.utils.FileUtils import com.lightgame.utils.Utils import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers diff --git a/module_common/src/main/java/com/gh/gamecenter/common/utils/FileUtils.java b/module_common/src/main/java/com/gh/gamecenter/common/utils/FileUtils.java index f61cd477c9..e0561a653a 100644 --- a/module_common/src/main/java/com/gh/gamecenter/common/utils/FileUtils.java +++ b/module_common/src/main/java/com/gh/gamecenter/common/utils/FileUtils.java @@ -42,7 +42,21 @@ public class FileUtils { String dir; String baseDir; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - baseDir = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); + try { + // 在部分设备,可能是使用 sd 卡的设备? getExternalFilesDir 方法返回 null + // 异常时使用备用存储位置作为下载地址 + baseDir = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); + } catch (NullPointerException exception) { + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { + // Android 6.0 的设备无法直接下载至根目录 Download 文件夹(需要获取外部存储权限) + // 使用 getFilesDir 方法后,默认情况下 PackageInstaller 无法获取直接读取安装 APK + // 一般的处理方式是下载的时候将文件 openFileOutput(APK_FILENAME, Context.MODE_WORLD_READABLE) + // 但因为下载文件由下载模块创建,暂时不做修改,换成在下载完成后调用 file.setReadable(true, false) 使文件可读 + baseDir = context.getFilesDir().getAbsolutePath(); + } else { + baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); + } + } } else { baseDir = context.getFilesDir().getAbsolutePath(); }