0

我使用下载管理器更新应用程序以获取新版本。但有些手机无法像 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()' 会跳转到 'finally'

4

0 回答 0