我有一个应用程序(我们称之为主应用程序),它在 Assets 文件夹中有一个 index.html 页面。 index.html 是一个带有一些 JavaScript 的简单 HTML 文件。它不需要 PHP 或 MySql。
我想做的是将 NanoHttpd 服务器嵌入到我的主应用程序中,并在应用程序启动或恢复时自动启动 Nano 服务器,并在我的应用程序中查看我的 index.html 文件。虽然我知道我可以使用
webView.loadUrl("file:///android_asset/index.html");
要访问 index.html 文件,在这种情况下不可能这样做。因此需要使用网络服务器。
现在我有一个不同的专用应用程序作为 Web 服务器,它运行在 http://localhost:8080。 .当我打开主应用程序时,它会自动运行。如您所见,为了查看 HTML 文件,您需要启动 Web 服务器,启动它,然后返回主应用程序并启动它。我想要一个解决方案,当我吃完我的主应用程序并开始在 webview 上显示 index.html 内容时,NanoHttpd 服务器会自动启动。这是我的代码,可以完美地使用我的主应用程序和网络服务器
WebView wv;
wv = (WebView) findViewById(R.id.webView1);
WebSettings webSettings = wv.getSettings();
webSettings.setJavaScriptEnabled(true);
wv.loadUrl("http://localhost:8080/index.html");
虽然 O 找不到它的确切文档,但我从以下链接尝试了两种不同的方法
两个都没有用,一个只显示一个白页,而其他的只是给我一个服务器正在运行的响应。
那么如何在我的应用程序启动时自动启动 NanoHttpd 服务器,并自动将 html 文件从我的 Assets 文件夹启动到 Web View ? 如果对 NanoHttpd 的要求太多,是否有另一种方法可以将网络服务器与应用程序一起嵌入并启动 index.html?
最佳答案
鉴于您的 assets 文件夹中的 HTML 结构遵循以下层次结构:
+ src
++ main
+++ assets
+++ java
+++ res
您可以使用以下方法打开不受安全限制的本地文件:
webView.loadUrl("file:///android_asset/index.html");
此外,您还应该设置此项以启用 Javascript 在加载内容之前在本地运行:
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
此外,您还可以设置一些其他设置以最适合您的需求,例如:
setBuiltInZoomControls(true);
setSupportZoom(true);
setDefaultTextEncodingName("utf-8"); // support international chars
setUserAgentString("myVeryOwnUserAgent"); // personalize UA
等等。
关于android - 使用我的应用程序中嵌入的 NanoHttpd 服务器查看 Assets 文件夹中的 index.html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54697024/