android - 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 时,它显示无法打开文件错误。任何帮助表示赞赏。
解决方案
推荐阅读
- python - 当使用变量作为 soup.find() 的输入时,返回 None,但使用相同的 str 值作为输入有效
- python - 在 Windows 10 中编写 pip install psycopg2 以将 python 与 postgres 连接以用于我的 django 项目时出现错误
- node.js - Heroku 上的节点 HTTP 服务器
- angular - 导航到Angular 9中的另一个页面后如何删除方法“添加”
- c# - C# System.IO.IOException '进程无法访问文件'photolocation',因为它正被另一个进程使用
- jenkins - 詹金斯服务器。新日期。不合时机
- sql-server - Azure 上的多个 SQL 实例
- javascript - React Native - 如何将 .subscribe() 与滚动视图的 onLayout 和 onScroll 一起使用?
- npm - 需要 npm 依赖的 composer 包
- javascript - Cheerio 获取嵌套的 div 元素