Android 操作快速查看 - 文件问题 - 尝试打开远程 pdf 文档

Posted

技术标签:

【中文标题】Android 操作快速查看 - 文件问题 - 尝试打开远程 pdf 文档【英文标题】:Android Action Quick View - Problem with file - trying to open remote pdf document 【发布时间】:2019-12-31 17:49:43 【问题描述】:

我在 android 应用程序中使用 webview。当用户单击下载链接时,我正在捕获请求(shouldOverrideUrlLoading)并通过 API 请求执行下载 - 因为只有在用户通过身份验证时才能下载。因此我使用下面的代码。有多少文件没有正确打开,快速查看显示错误消息“文件问题”(附截图)。

设置为 i.data 的 URL 可以正常工作(身份验证和下载也可以在任何浏览器的私有模式下工作)

override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean 
        if (url.indexOf("example.com") !== -1 && (url.indexOf(".pdf") !== -1 || url.indexOf(".xlsx") !== -1)) 
            println("trying to override url loading")
            val i = Intent(Intent.ACTION_QUICK_VIEW)
            val preferences = contextOfApplication!!.getSharedPreferences("example", Context.MODE_PRIVATE)
            val email = preferences.getString("email", "")
            val token = preferences.getString("token", "")
            i.data = Uri.parse("http://example.com/api/getfile/" + url.substring(url.lastIndexOf('/')+1) + "?mail=" + URLEncoder.encode(email, "UTF-8") + "&token=" + URLEncoder.encode(token, "UTF-8") + "&relative_path=" + URLEncoder.encode(URL(url).path))
            contextOfActivity!!.startActivity(i)
            return true
        
        return false
    

网址可能如下所示:

http://example.com/api/getfile/example.pdf?mail=xyz&token=xyz&relative_path=example.pdf

我将文件名(由服务器重写)添加到 URL 的末尾,在 Get 参数之前,以便 Android 可以检测到正确的文件扩展名。

也许 ACTION_QUICK_VIEW 不支持包含 GET 参数的 URL?是否可以绕过此错误或暂时下载文件并在之后打开它?

提前致谢!

【问题讨论】:

【参考方案1】:

我会将the documentation 解释为Uri 必须是content Uri

此外,http 在较新版本的 Android 上默认被禁止(与 https 相比),因此即使支持 Web URL,http 方案也可能不支持。

您可能需要download the content yourself,然后使用FileProvider 制作content Uri 以与您的Intent 一起使用。

【讨论】:

感谢您的回答。我会试试这个,让你知道它是否有效! 这个问题实际上是通过切换到 https 来解决的!我正在测试的开发环境直到现在还没有证书。

以上是关于Android 操作快速查看 - 文件问题 - 尝试打开远程 pdf 文档的主要内容,如果未能解决你的问题,请参考以下文章

Android 怎么快速查看xml文件被调用的哪个java文件

黎活明8天快速掌握android视频教程--24_网络通信之网页源码查看器

Android Studio之简单快速方便的查看数据库的内容

怎么查看文件属性

Android Studio技巧

Android Studio技巧