首页 > 解决方案 > Android:无法打开从 DownloadManager 下载的 csv 文件

问题描述

我正在尝试打开使用手机中可用的应用程序下载的CSV文件。DownloadManager但我无法打开它。第三方应用程序返回给出错误Toast 消息警告对话框说找不到文件位置。但是,当我手动打开文件时,该应用程序正在正常打开。我编写了下面的代码来访问下载的文件并使用 Intent Chooser 打开。

fun openDownloadedFile(referenceId : Long){
    if (downloadReference === referenceId)
    {
        val query = DownloadManager.Query()
        query.setFilterById(downloadReference)
        var downloadManager = activity?.getSystemService(DOWNLOAD_SERVICE) as DownloadManager?
        val c = downloadManager?.query(query)!!
        if (c.moveToFirst())
        {
            val columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS)
            if (DownloadManager.STATUS_SUCCESSFUL === c.getInt(columnIndex))
            {
                var localUri:String = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))
                if (localUri.substring(0, 7).equals("file://")) {
                    localUri =  localUri.substring(7);
                }
                var file = File(localUri);
                val fileExtension = MimeTypeMap.getFileExtensionFromUrl(localUri)
                var mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension)
                if (mimeType != null)
                {
                    mimeType = "text/csv" // even after removing manual mime type it is not working.  
                    var intent =  Intent(Intent.ACTION_VIEW);
                    //var file = File(localUri);
                    var absoluteFilePath = file.getAbsolutePath();
                    var uri = Uri.parse( "content:/"+absoluteFilePath);
                    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
                    intent.setDataAndTypeAndNormalize(uri, mimeType);
                    try
                    {
                        // Add chooser to open file.
                        var intentChooser = Intent.createChooser(intent, "Choose Application");
                        startActivityForResult(intentChooser,1000);
                    }
                    catch (e:ActivityNotFoundException) {
                    }
                }
            } else {
                Log.d(“TAG”, "Download Failed.. status : "+c.getInt(columnIndex))
            }
        }
    }
}

当我选择 Microsoft Excel 时,它显示无法打开文件错误。任何帮助表示赞赏。

标签: androidkotlinandroid-contentproviderandroid-download-manager

解决方案


推荐阅读