需要帮助来实现WebViewAssetLoader

问题描述 投票:0回答:2

我已将用

HTML
CSS
JavaScript
编写的现有游戏转换为 Android 应用程序,方法是使用
WebView
教程)将游戏包装在本机 Java 应用程序中。游戏使用
HTML5 Canvas
进行渲染。所有文件都存储在本地。

游戏包含多个JS文件,在物理设备上会导致CORS/同源错误,而在虚拟设备上运行则不会出现错误。显然解决方案是实施

WebViewAssetLoader

不幸的是,文档没有提供大量上下文,对于缺乏经验的 Android 开发人员来说,不清楚如何实际实现此功能。非常感谢任何帮助或建议。

java android android-webview
2个回答
0
投票

只需将源代码复制粘贴到资产文件夹中,然后使用此代码在 Web 视图中加载 index.html 文件。

wv.setWebViewClient(new WebViewClient()); 
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setUseWideViewPort(true);
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setPluginState(WebSettings.PluginState.ON);
wv.getSettings().setAllowFileAccess(true);
wv.getSettings().setAllowContentAccess(true);
wv.getSettings().setAllowFileAccessFromFileURLs(true);
wv.getSettings().setAllowUniversalAccessFromFileURLs(true);
wv.loadUrl("file:///android_asset/index.html");

0
投票

您需要:

import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.webkit.WebViewAssetLoader;
import androidx.webkit.WebViewClientCompat;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;

   final WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder()
.addPathHandler(
    "/assets/",
    new WebViewAssetLoader.AssetsPathHandler(this)
)
.build();
WebView browser = (WebView) findViewById(R.id.w1);

browser.setWebViewClient(
  new WebViewClientCompat() {
    @Override
    public WebResourceResponse shouldInterceptRequest(
      WebView view,
      WebResourceRequest request
    ) {
      return assetLoader.shouldInterceptRequest(request.getUrl());
    }

    @Override
    @SuppressWarnings("deprecation") // for API < 21
    public WebResourceResponse shouldInterceptRequest(
      WebView view,
      String url
    ) {
      return assetLoader.shouldInterceptRequest(Uri.parse(url));
    }
  }
);

// WebSettings webViewSettings = browser.getSettings();

browser.getSettings().setJavaScriptEnabled(true);
browser.getSettings().setDomStorageEnabled(true);
browser.loadUrl("https://appassets.androidplatform.net/assets/index.html");

浏览器是您的 Activity xml 中 Web 视图的名称/ID。

还记得以“assets”为基础构建文件,并将文件放入“main/android_asset”(是的,我知道)。

© www.soinside.com 2019 - 2024. All rights reserved.