Android WebView:WebGL无法在某些设备上运行
我在我的Android应用程序中使用Webview。任务是在屏幕上添加WebGL交互元素。 应用程序有minSdk v21。谷歌宣布他们支持WebView v36中的WebGL。我用html5test.com页面和我的测试网页检查WebGL状态。
我的测试设置: 谷歌Nexus 6P - Android 6.0.1,webView v48 - WebGL OK工作
索尼Xperia Z2 - Android 5.1.1,webView v48 - WebGL OK工作
三星Galaxy Note 4 - Android 5.1.1,webView v48 - WebGL OK工作
三星Galaxy Tab S - Android 5.0.2,webView v48 - WebGL FAILED空白屏幕
RKM V5 Android TV - Android 5.1.1,webView v39 - WebGL FAILED黑屏
我在Google Developer文档中没有看到有关android.webkit.WebView元素的任何信息 有没有办法让它可以在所有设备上工作?
我的webView初始化:
mElementView = new WebView(mContext);
mElementView.setVerticalScrollBarEnabled(scrollEnabled);
mElementView.setHorizontalScrollBarEnabled(scrollEnabled);
mElementView.getSettings().setJavaScriptEnabled(true);
mElementView.getSettings().setAllowUniversalAccessFromFileURLs(true);
mElementView.getSettings().setAllowFileAccessFromFileURLs(true);
更新:WebGL可在所有设备上的Chrome浏览器中使用,但在Galaxy Tab和Android TV webViews中失败
答案 0 :(得分:4)
后来,但我认为这对某人会有帮助。
在使用webView
的活动中,在androidmanifests set:android:hardwareAccelerated="true"
中进行设置。
我的webView
看起来像这样:
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setLoadsImagesAutomatically(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
webView.getSettings().setAllowFileAccessFromFileURLs(true);
}
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebChromeClient(new WebChromeClient());
答案 1 :(得分:1)
这种编码效果很好。试试这个
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
TextView title=(TextView)findViewById(R.id.toolbar_title);
title.setText(R.string.about);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
webView=(WebView)findViewById(R.id.webView);
webView.setWebViewClient(new MyBrowser());
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.loadUrl(url);
}
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId()) {
case android.R.id.home:
Intent report = new Intent(About.this, MainActivity.class);
startActivity(report);
finish();
break;
default:
break;
}
return false;
}
@Override
public void onBackPressed() {
Intent intent=new Intent(About.this,MainActivity.class);
startActivity(intent);
super.onBackPressed();
}
答案 2 :(得分:1)
查看this个答案。它可能会有所帮助。否则,我会建议您使用CrossWalk项目。