Android 在安卓系统中,如何在web应用程序中启动本地HTML页面?

Android 在安卓系统中,如何在web应用程序中启动本地HTML页面?,android,android-intent,Android,Android Intent,我正在尝试在Android棒棒糖浏览器中加载本地网页: Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse("file:///android_asset/my_page.html")); startActivity(i); 不幸的是,我发现这个页面找不到。后来我发现默认浏览器只支持HTTP和HTTPS请求 这是否意味着我必须启动用户手机上的本地web服务器才能通过web意图加载我的_page.ht

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

    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse("file:///android_asset/my_page.html"));
    startActivity(i);
不幸的是,我发现这个页面找不到。后来我发现默认浏览器只支持HTTP和HTTPS请求

这是否意味着我必须启动用户手机上的本地web服务器才能通过web意图加载我的_page.html?:/这样的本地服务器,但对于我的使用来说似乎太重了

我不能使用web视图,因为web视图不允许用户下载,这是我的应用程序所依赖的(我尝试编写了一个
DownloadListener
,但没有用)

我可以简单地将静态页面托管在远程服务器上,但这样我的应用程序将无法脱机使用。。。除非我用。然而,使用应用缓存是次优的,因为用户首次使用应用最好是在他/她在线时。。。否则,第一次加载失败

关于如何通过web打开本地资产页面有什么想法吗

不幸的是,我发现这个页面找不到

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

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

Android设备有数千种型号。所有这些应用程序都将有多个“默认浏览器”实现。也就是说,虽然浏览器实现可能支持
文件
(用于文件系统上碰巧可由浏览器访问的实际文件)或
内容
(用于通过
内容提供商提供应用程序中的材料),但并非所有实现都支持

这是否意味着我必须启动用户手机上的本地web服务器才能通过web应用程序加载我的_page.html

如果“web意图”是指
操作视图
意图
,那么如果您想要一个相当通用的解决方案,那么可以。或者,让页面在非设备Web服务器上可用

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

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

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

或者,考虑是否首先通过Web内容传递这个应用程序的UI是正确的解决方案。

尝试一下,这就迫使提供的文件在Android Web浏览器中启动:

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);
您还可以在代码前面指定
文件
,然后使用此文件而不是前面的第三行:

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

的可能重复项未发现您无法使用webview。因此,它不是重复的。您可以将文件从资产复制到存储,并从那里作为实例打开它。您也可以使用WebView而不是使用外部浏览器安装更多浏览器。Dolphin、Firefox和Opera将处理这些问题。或者使用NanoHttpd为所有浏览器(包括Chrome和默认浏览器)提供您的页面。感谢您提供了丰富的思想食粮。正确的。。。我可能需要启动一个本地服务器。此外,还添加了指向对象URL的链接。下载管理器仅接受http/https URL。