【问题标题】:can't open file downloaded through download manager api无法打开通过下载管理器 api 下载的文件
【发布时间】:2014-09-07 10:37:17
【问题描述】:

我使用 Android 中的 DownloadManager API 成功下载了一个 pdf 文件。

清单权限设置正确。 文件下载正确。

但是当它试图打开它时却显示“无法打开文件”。

请帮忙打开下载的文件。我想我没有为文件设置正确的名称和扩展名。如何设置?

private void DownloadBook(String url, String title){

    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
    //request.setDescription("Some descrition");
    String tempTitle = title.replace(" ","_");
    request.setTitle(tempTitle);
    // in order for this if to run, you must use the android 3.2 to compile your app
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        request.allowScanningByMediaScanner();
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    }
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, tempTitle+".pdf");

    // get download service and enqueue file
    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    request.setMimeType(".pdf");
    request.allowScanningByMediaScanner();
    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
    manager.enqueue(request);
}

【问题讨论】:

  • 请显示您尝试确定文件名并打开文件的代码。
  • 我没有尝试从我的应用程序中打开文件。 pdf 将下载到下载文件夹中,然后用户从那里手动打开它。没有打开下载的文件。
  • 您在 if 循环内和倒数第三行复制了 request.allowScanningByMediaScanner(); 行。

标签: android android-webview android-download-manager


【解决方案1】:

问题解决了。问题在于为下载的文件设置 MIME 类型。默认情况下,通过谷歌搜索,服务器将文件作为其内容类型发送为 application/x-download 而不是 application/pdf。所以在设置mime类型为pdf。

我将这个 request.setMimeType(".pdf"); 更改为 request.setMimeType("application/pdf"); 就是这样。

【讨论】:

  • 请帮助我,我正在通过同一个下载管理器下载 jpg 文件,即使将 mimetype 设置为 application/jpg 也无法打开文件我还需要做什么
  • 请使用 application/jpeg 或 application/png 尝试一次
  • jpg 文件 mimtype 为 "image/jpeg" 来源:sitepoint.com/mime-types-complete-list
【解决方案2】:

request.setMimeType() 用于 Kotlin 上不同类型的文件,如果“无法打开文件”android DownloadManager

val downloadFile = download   // for example text.txt, text.xml, icon.jpg...
request.setMimeType(getMimeFromFileName(downloadFile))

private fun getMimeFromFileName(fileName: String): String? {
        val map = MimeTypeMap.getSingleton()
        val ext = MimeTypeMap.getFileExtensionFromUrl(fileName)
        return map.getMimeTypeFromExtension(ext)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2017-07-04
    • 2015-03-12
    • 2023-02-06
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多