Downloadmanager обновить приложение, но не удалось

я использую менеджер загрузки для обновления приложения, чтобы получить новую версию. но некоторые телефоны не могли работать, как 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 23.01.2019 04:59

я не помню. Когда найду, скажу. Думаю, ты очень много

maomengchong 24.01.2019 05:17

да ! это идет, чтобы наконец. я не знаю, почему c.moveToFirst() @entpnerd

maomengchong 12.02.2019 10:07
0
3
31
0

Другие вопросы по теме