如何使用 krpano 在 WebView 上启用 WebVR?
How to enable WebVR on WebView with krpano?
我设法在 Chrome 和 Firefox 上使用 WebVR 运行 krpano,纸板按钮可见并已启用。但是在 运行 将它嵌入到 Android 的 WebView 中后,它没有显示纸板按钮。
但是后来,我发现我用 WebView 编译的 apk 在我的其他设备上显示了纸板按钮。我将如何在我的 phone 上强制执行相同的行为,因为我知道它在 Chrome 和我的 android phone 上的 Firefox Mobile 中有效,但在使用我的 WebView 实现时无效?
我需要设置什么配置?或模拟以确保所有 android 支持它的设备启用 WebVR,而不仅仅是某些设备或由设备自行决定,即使它真的可以 运行 吗?
static final String BASE = "http://app.imaginarydomain.com";
static final Pattern PATH_PATTERN = Pattern.compile(Pattern.quote(BASE) + "/(.*)");
...
WebSettings webSettings = webView.getSettings();
webSettings.setBlockNetworkLoads(false);
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new TestWebViewClient());
webView.loadUrl(BASE + "/tour.html");
...
class TestWebViewClient extends WebViewClient {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
Matcher matcher = PATH_PATTERN.matcher(url);
if (matcher.matches()) {
String asset = "sample-tour-cardboard/" + matcher.group(1);
try {
InputStream is = getAssets().open(asset);
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
String type = "application/octet-stream";
if (extension != null) {
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return new WebResourceResponse(type, "UTF-8", is);
} catch (IOException e) {
Log.e("ERROR!", "Asset loading error: " + asset, e);
}
}
return null;
}
}
我还尝试在 krpano WebView 插件中启用 WebVR fake 模式。但是没用。
我猜测 WebVR 插件正在检查 WebView 上下文中的某些内容,并且检查仅在 Chrome Mobile、Firefox Mobile 或其他设备的其他实现上成功。
krpano 使用的 WebVr 插件需要 WebGL,仅在 Android L Developer 之后才在 Android WebView 中提供预览.
chrome 的开发者页面上提供了有关此限制的更多信息:https://developer.chrome.com/multidevice/webview/overview
因此,纸板图标不会显示在 Android WebView 中。
如果您需要支持棒棒糖设备,您可以使用 XWalk 项目中的 XWalkView。
Link: https://crosswalk-project.org/documentation/embedding_crosswalk.html .
如需额外帮助,请参阅我在 krpano 论坛上关于嵌入 xwalk 的讨论 link:http://krpano.com/forum/wbb/index.php?page=Thread&postID=61064
我设法在 Chrome 和 Firefox 上使用 WebVR 运行 krpano,纸板按钮可见并已启用。但是在 运行 将它嵌入到 Android 的 WebView 中后,它没有显示纸板按钮。
但是后来,我发现我用 WebView 编译的 apk 在我的其他设备上显示了纸板按钮。我将如何在我的 phone 上强制执行相同的行为,因为我知道它在 Chrome 和我的 android phone 上的 Firefox Mobile 中有效,但在使用我的 WebView 实现时无效?
我需要设置什么配置?或模拟以确保所有 android 支持它的设备启用 WebVR,而不仅仅是某些设备或由设备自行决定,即使它真的可以 运行 吗?
static final String BASE = "http://app.imaginarydomain.com";
static final Pattern PATH_PATTERN = Pattern.compile(Pattern.quote(BASE) + "/(.*)");
...
WebSettings webSettings = webView.getSettings();
webSettings.setBlockNetworkLoads(false);
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new TestWebViewClient());
webView.loadUrl(BASE + "/tour.html");
...
class TestWebViewClient extends WebViewClient {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
Matcher matcher = PATH_PATTERN.matcher(url);
if (matcher.matches()) {
String asset = "sample-tour-cardboard/" + matcher.group(1);
try {
InputStream is = getAssets().open(asset);
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
String type = "application/octet-stream";
if (extension != null) {
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return new WebResourceResponse(type, "UTF-8", is);
} catch (IOException e) {
Log.e("ERROR!", "Asset loading error: " + asset, e);
}
}
return null;
}
}
我还尝试在 krpano WebView 插件中启用 WebVR fake 模式。但是没用。
我猜测 WebVR 插件正在检查 WebView 上下文中的某些内容,并且检查仅在 Chrome Mobile、Firefox Mobile 或其他设备的其他实现上成功。
krpano 使用的 WebVr 插件需要 WebGL,仅在 Android L Developer 之后才在 Android WebView 中提供预览.
chrome 的开发者页面上提供了有关此限制的更多信息:https://developer.chrome.com/multidevice/webview/overview
因此,纸板图标不会显示在 Android WebView 中。
如果您需要支持棒棒糖设备,您可以使用 XWalk 项目中的 XWalkView。
Link: https://crosswalk-project.org/documentation/embedding_crosswalk.html .
如需额外帮助,请参阅我在 krpano 论坛上关于嵌入 xwalk 的讨论 link:http://krpano.com/forum/wbb/index.php?page=Thread&postID=61064