使用Cordova将对象传递给Android下载管理器

时间:2015-12-25 14:25:11

标签: android cordova android-download-manager

我正在使用Apache Cordova开发ReactJS应用程序。其中一个特性是对象下载(BLOB对象是用应用程序代码构建的,然后应该作为文件下载)。它在浏览器中运行良好,但我完全坚持让它在Android下的WebView中运行。

“Response.ContentType = .... etc”是在浏览器中启动文件下载的众所周知的方法,此响应应该在服务器上构建并呈现给浏览器。但在我们的例子中,我们已经得到了响应,因为正在执行的Javascript本身就是响应的一部分,我们没有服务器,能够呈现相关的响应。我试图谷歌寻求解决方案,如

document.location = 'data:Application/octet-stream,' +
                         encodeURIComponent(dataToDownload);
}

是我找到的唯一。我不得不承认它在浏览器和手机上都不起作用,大二进制对象的url-encoding看起来很古怪。

我想即使我能够做出相关的响应,它也无法在Webview中运行,我可能不得不使用Java插件来启动Android下载管理器(我绝对不熟悉Java和Android开发的东西并推断出来)来自谷歌搜索“下载管理器”是用户在Android上运行的浏览器中下载文件,或者从Playmarket安装应用程序或下载蓝牙等文件时在手机上启动的过程。它在电话通知栏中显示传入文件通知将文件带到默认的下载目录。如果我错了,请纠正我,因为稍后我将使用“下载管理器”这个术语来表达我刚刚提到的内容。

让我感到惊讶的是,应该广泛使用的功能在谷歌搜索解决方案方面是绝对模糊的。它似乎没有人需要它,或者它是如此简单明显,没有人遇到任何问题。

是的,我找到了一些像FileTransfer或后台下载管理器这样的插件,但似乎没有一个像我需要的那样。尝试了两者,他们似乎注定要下载外部资源并将其保存到本地文件而不涉及下载管理器。但是我连工作均未能成功。试图传递现有的URL和代码挂起或引发错误处理程序错误,如“必须使用外部存储”(BTW我不知道如何匹配Android中的文件:///资源与手机存储文件夹,并搜索它。但是所有解决方案都使用了在Cordova应用程序中无法访问的android ENVIRONMENT对象,并且没有解释如何将其附加到Cordova)

我搜索到的更加模糊的插件越远。最后找到的plugin是。

应该这样做我们需要(现在我省略了如何构建BLOB对象到android兼容的Uri的问题,这应该是我们下载的源,并期待一个长的撞击墙,但现在我想要至少为Internet上的一些现有资源启动下载

这个插件中有什么可疑的,它需要PATH作为参数。路径看起来不像我们需要的,因为文件应该保存默认的Android下载功能并放置到默认的下载文件夹。所以文件名只是我们在这种情况下需要的。

但这个插件没有自述文件,似乎有些不足或无法正常工作。当我用cordova构建.apk时,它会导致失败。深入学习,我发现Java编译器诅咒省略';'在.java插件文件中。我不熟悉java,但修复了缺失的半列,遇到了另一个问题链 - 编译器变得诅咒每个依赖项,说它是未知的符号。事实上,它们都没有列在命名空间导入部分中,有些我设法修复(例如通过添加'import java.io. *'来知道未知'文件'),但有些我现在知道从哪里获得。所以插件似乎没有功能,或者我错过了安装的一些先决条件(但我成功安装了其他插件)

最终我花了3天时间无济于事,我想知道为什么这么常见的功能需要和讨论很少

非常感谢任何建议或特别有用的插件/示例。我不相信在科尔多瓦只能简单地下载文件就无法实现。

0 个答案:

没有答案