【问题标题】:Download manager does not work on LG devices下载管理器不适用于 LG 设备
【发布时间】:2017-05-31 10:43:09
【问题描述】:

我尝试使用DownloadManager 下载文件。除 LG 设备外,一切正常。这是我的代码:

private void downloadFile(FileInfo fileInfo) {
    private DownloadManager manager = (DownloadManager) MyApp.getSingleton().
            getApplicationContext().getSystemService(Context.DOWNLOAD_SERVICE);

    DownloadManager.Request request = new DownloadManager.Request(Uri.parse("https://"
            + MyPreference.getInstance().getBaseUrl()
            + "/api/v3/files/"
            + fileId
            + "/get"));

    request.setDescription(MyApp.getSingleton().getApplicationContext().getString(R.string.downloading));
    request.setTitle(fileInfo.getmName());
    request.addRequestHeader("Authorization", "Bearer " + MyPreference.getInstance().getAuthToken());
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    File dir = new File(FileUtil.getInstance().getDownloadedFilesDir());
    if(!dir.exists()){
        dir.mkdirs();
    }
    request.setDestinationUri(Uri.fromFile(new File(FileUtil.getInstance().getDownloadedFilesDir() + File.separator + fileInfo.getmName())));

    downloadId = manager.enqueue(request);

    new Thread(() -> {

        boolean downloading = true;
        while (downloading) {

            DownloadManager.Query q = new DownloadManager.Query();
            q.setFilterById(downloadId);

            Cursor cursor = manager.query(q);
            cursor.moveToFirst();
            int bytes_downloaded = 0;
            long bytes_total = 0;
            try {
                bytes_downloaded = cursor.getInt(cursor
                        .getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
                bytes_total = cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
            } catch (CursorIndexOutOfBoundsException e) {
                e.printStackTrace();
                cursor.close();
                break;
            } catch (IllegalArgumentException e){
                e.printStackTrace();
                cursor.close();
                break;
            }
            if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_FAILED) {
                downloading = false;
                cursor.close();
                onDownloadFail();
                break;
            } else if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
                downloading = false;
                cursor.close();
                break;
            }

            if (bytes_total > 0) {
                final int dl_progress = (int) ((bytes_downloaded * 100L) / bytes_total);
                    onProgress(dl_progress);
            }
            cursor.close();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }).start();
}

在 LG 设备线上

bytes_total = cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));

返回 -1。 下载通知出现在通知栏中,并在几毫秒后立即消失。没有一个例外,没有人进入这个代码部分

if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_FAILED) {
                downloading = false;
                cursor.close();
                onDownloadFail();
                break;
            }
else if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
                downloading = false;
                cursor.close();
                break;
            }

什么都没有。所以内部 while() 循环永远有效。 在 LG D802 和 LG G3 S 设备上进行了测试。这两款设备的行为相同。

【问题讨论】:

  • 如果您尝试使用不使用 HTTPS 的 URL 是否有效?我最近遇到了同样的问题,到目前为止,如果我从 https 切换到 http,它似乎是可行的。这并不总是一种选择,但如果可能的话,它对你有用。

标签: android file android-download-manager download-manager


【解决方案1】:

我遇到了同样的问题并找到了解决方案。在初始化下载管理器之前,您需要确保所有目录都存在。 示例:在我的情况下,我的文件的路径是 /storage/emulated/0/MyFolder/n.jpeg 所以我必须确保 MyFolder 目录在初始化下载管理器之前存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多