【问题标题】:No activity found to handle Data Uri未找到处理数据 Uri 的活动
【发布时间】:2014-02-24 05:19:00
【问题描述】:

基本上,我想根据用户提供给我的应用的一些数据生成报告。我的第一个想法是生成一个 PDF 文件。结果证明这是不可行的,因为唯一的免费库不支持文本换行等功能,而付费库的许可费用约为 1000 美元。

所以我已经生成了一个包含所有内容的 html 文件,如果我在桌面 Chrome 中打开这个文件,它会呈现正常。当用户点击分享按钮时,应用程序应该启动一个意图来让默认浏览器或移动 Chrome 打开 html 文件。

我知道如何通过一个意图用浏览器打开一个 url,问题是打开一个文件。正在通过 FileProvider 访问 HTML 文件(因此是 uri,例如:“content://[package].fileprovider/[filename].html”)。如果我运行myIntent.setData(htmlFileUri); 并启动意图,则对话框中不会显示任何浏览器,只有文本编辑器。如果我使用setDataAndType,也是一样。

接下来我尝试了一个 Data Uri:data:text/html;base64,[html as base64]。同样,如果我将此字符串复制到桌面 Chrome 中,它可以正常工作。但是,如果我用这个 uri 开始一个意图,我会得到 ​​p>

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=data:text/html;base64,[base64]== typ=text/html }

最后,如果我将 http:// 附加到数据 uri 的开头,我可以选择打开 chrome 或默认浏览器。如果我这样做,则不会呈现任何内容,甚至页面 url 也不会呈现。

还有什么我可以尝试的,或者有什么一般性的建议吗? 提前致谢

【问题讨论】:

  • 将您的 html 文件保存在资产中并从那里启动它或用户 webview 以在您自己的项目中显示 html

标签: android android-intent android-contentprovider android-fileprovider


【解决方案1】:

AFAIK 内置 HtmlViewer 应用程序无法通过将 Intent 的数据部分设置为 text/html 可靠地工作。相反,你可以

  • 将 HTML 复制到外部存储,然后将 Intent 的 URI 设置为 file:///mnt/sdcard/path/to/file.html
  • 使用 WebView 创建一个 Activity 并使用 loadData() 方法在您的应用中加载 HTML。

【讨论】:

猜你喜欢
  • 2011-05-15
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多