я использую менеджер загрузки для обновления приложения, чтобы получить новую версию. но некоторые телефоны не могли работать, как huawei Mate 20 .huawei P 20.
Некоторое время это могло быть, но когда пользователь использовал немного времени спустя, это не могло загрузиться.
public static void downloadApk(Context context, String url, String title, final String appName) {
//获取存储的下载ID
long downloadId = SystemParams.getInstance().getLong(DownloadManager.EXTRA_DOWNLOAD_ID, -1L);
if (downloadId != -1) {
//存在downloadId
DownLoadUtils downLoadUtils = DownLoadUtils.getInstance(context);
//获取当前状态
int status = downLoadUtils.getDownloadStatus(context, downloadId);
if (DownloadManager.STATUS_SUCCESSFUL == status) {
//状态为下载成功
//获取下载路径URI
Uri downloadUri = downLoadUtils.getDownloadUri(downloadId);
if (null != downloadUri) {
//存在下载的APK,如果两个APK相同,启动更新界面。否之则删除,重新下载。
if (compare(getApkInfo(context, downloadUri.getPath()), context)) {
startInstall(context, downloadUri);
return;
} else {
//删除下载任务以及文件
downLoadUtils.getDownloadManager().remove(downloadId);
}
}
start(context, url, title, appName);
} else if (DownloadManager.STATUS_FAILED == status) {
//下载失败,重新下载
start(context, url, title, appName);
} else {
Log.d(context.getPackageName(), "apk is already downloading");
}
} else {
//不存在downloadId,没有下载过APK
start(context, url, title, appName);
}
}
public int getDownloadStatus(Context context, long downloadId) {
DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId);
Cursor c = mDownloadManager.query(query);
if (c != null) {
try {
boolean b = c.moveToFirst();
if (b) {
return c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS));
}
} finally {
c.close();
}
}
return -1;
}
я выполнил отладку и обнаружил, что метод getDownloadStatus возвращает -1, потому что код «c.moveToFirst ()» для перехода к «наконец-то»
я не помню. Когда найду, скажу. Думаю, ты очень много
да ! это идет, чтобы наконец. я не знаю, почему c.moveToFirst() @entpnerd
Есть ли исключение, создаваемое
c.moveToFirst()?