【问题标题】:How can I launch a local HTML page in a web intent in Android?如何在 Android 的 Web Intent 中启动本地 HTML 页面?
【发布时间】:2015-06-30 11:22:59
【问题描述】:

我正在尝试在 Android Lollipop 浏览器中加载本地网页:

    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse("file:///android_asset/my_page.html"));
    startActivity(i);

很遗憾,我发现该页面无法找到。后来发现默认浏览器只支持HTTP和HTTPS请求。

这是否意味着我必须在用户手机上启动本地网络服务器才能通过网络意图加载 my_page.html? :/ 这样的本地服务器exist at least,但对我来说似乎太重了。

我不能使用网络视图,因为网络视图不允许用户下载我的应用所依赖的 object URLs(我尝试编写使用 DownloadManagerDownloadListener 无济于事。)。

我可以简单地将静态页面托管在远程服务器上,但是我的应用程序将无法离线使用......除非我使用App Cache。但是,使用 App Cache 不是最理想的,因为用户第一次使用应用程序最好是在他/她在线时......否则,第一次加载会失败。

关于如何通过网络意图打开本地资产页面的任何想法?

【问题讨论】:

  • Open Local Html File in Webview - Android 的可能重复项没有看到您不能使用 webview。所以它不是重复的。
  • 您可以将文件从资产复制到存储中,然后从那里作为实例打开它。您也可以使用 WebView 而不是使用外部浏览器
  • 安装更多浏览器。 Dolphin、Firefox 和 Opera 将处理它们。或者使用 NanoHttpd 为所有浏览器(包括 Chrome 和默认浏览器)提供您的页面。

标签: android android-intent


【解决方案1】:

很遗憾,我发现找不到该页面

正确。您正在告诉第三方应用程序从其自己的应用程序资产加载页面,并且没有这样的页面。 file:///android_asset/ 仅在 your 进程是解释 Uri 的进程时才从 your 应用程序加载内容,而不是当您将这样的 Uri 交给第三方应用程序时.

后来发现默认浏览器只支持HTTP和HTTPS请求。

有数以千计的 Android 设备型号。所有这些都将有多个“默认浏览器”实现。话虽如此,虽然浏览器实现可能支持file(用于文件系统上恰好可由浏览器访问的实际文件)或content(用于通过ContentProvider从您的应用程序提供材料) ,并非所有人都会。

这是否意味着我必须在用户手机上启动本地网络服务器才能通过网络意图加载 my_page.html?

如果通过“网络意图”,您的意思是 ACTION_VIEW Intent,那么是的,如果您想要相当通用的解决方案。或者,让页面在设备外的 Web 服务器上可用。

请注意,保护本地 Web 服务器是一项棘手的工作。

我不能使用网络视图,因为网络视图不允许用户下载我的应用所依赖的对象 URL

我不确定您所说的“下载对象 URL”是什么意思。您可能会考虑提出一个单独的 Stack Overflow 问题,在那里您会更详细地讨论这个问题,除非已经有一个您确定涵盖您的场景的问题和答案。

或者,首先考虑通过 Web 内容提供此应用的 UI 是否是正确的解决方案。

【讨论】:

  • 感谢您提供丰富的思考。对...我可能必须启动本地服务器。此外,还添加了指向对象 URL 的链接。下载管理器只接受 http / https URL。
【解决方案2】:

试一试,这会强制在 Android 网络浏览器中启动提供的文件:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setDataAndType(Uri.parse("file:///android_asset/my_page.html"), "text/html");
startActivity(intent);

您也可以在代码前面指定File,然后使用它来代替前面的第三行:

intent.setDataAndType(Uri.fromFile(file), "text/html");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    相关资源
    最近更新 更多