2

我有一个基于 alfresco android sdk 的应用程序。用户登录到服务器后 MainActivity 启动。MainActivity 本身几乎没有片段。一个片段包含 webview、一些按钮和 textview。这是xml布局的代码:

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/prop"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:gravity="center" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="vertical" >

            <LinearLayout
                android:id="@+id/video_layout"
                android:layout_width="match_parent"
                android:layout_height="192dp"          
                android:orientation="horizontal"
                android:gravity="center" >

                <WebView
                    android:id="@+id/video_web_view"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" /> 

            </LinearLayout>
                .
                .
                . 
        </LinearLayout>
 </ScrollView>

当显示布局时,webview 应该加载带有 HTML5 视频的页面的 url,但只显示空白页面。一段时间后空白页变为灰色。我观察到这意味着页面已加载,并在用户滚动布局后显示带有 html5 视频的页面。我尝试过的每个网址都会发生这种情况。

在测试活动中,我使用相同的布局,并且正确加载并显示了带有视频的页面。

在片段和测试活动中,我使用相同的代码来设置 webview 和加载 url。Javascript 已启用,我使用 WebChromeClient,就像 WebView 文档中推荐的那样。我在应用程序清单中也有 INTERNET 权限。

这是来自测试活动的 onCreate 方法的代码:

protected void onCreate(Bundle savedInstanceState){         
        super.onCreate(savedInstanceState);     
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.web_video);
            web = (WebView)findViewById(R.id.video_web_view);
                .
                .
                .
            web.setWebChromeClient(new WebChromeClient());
            WebSettings webSettings = web.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setAllowContentAccess(true);
        webSettings.setAllowFileAccess(true);
            webSettings.setPluginState(PluginState.ON);
        webSettings.setDomStorageEnabled(true);
        web.setHorizontalScrollBarEnabled(false);
        web.setVerticalScrollBarEnabled(false);
        webSettings.setRenderPriority(RenderPriority.HIGH);     
        webSettings.setUseWideViewPort(false);
        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
            web.loadUrl(someUrl);
}

相同的代码在片段中包含 onCreateView。唯一的区别是用户必须登录到服务器才能显示片段。

我几乎忘记了 Logcat 的错误:

02-28 09:34:20.832: V/chromium(9079): external/chromium/net/host_resolver_helper/host_resolver_helper.cc:66: [0228/093420:INFO:host_resolver_helper.cc(66)] DNSPreResolver::Init got hostprovider:0x5354b220
02-28 09:34:20.832: V/chromium(9079): external/chromium/net/base/host_resolver_impl.cc:1515: [0228/093420:INFO:host_resolver_impl.cc(1515)] HostResolverImpl::SetPreresolver preresolver:0x018ee018
02-28 09:34:21.182: V/WebRequest(9079): WebRequest::WebRequest, setPriority = 1
02-28 09:34:21.382: V/chromium(9079): external/chromium/net/disk_cache/hostres_plugin_bridge.cc:52: [0228/093421:INFO:hostres_plugin_bridge.cc(52)] StatHubCreateHostResPlugin initializing...
02-28 09:34:21.392: V/chromium(9079): external/chromium/net/disk_cache/hostres_plugin_bridge.cc:57: [0228/093421:INFO:hostres_plugin_bridge.cc(57)] StatHubCreateHostResPlugin lib loaded
02-28 09:34:21.392: V/chromium(9079): external/chromium/net/disk_cache/hostres_plugin_bridge.cc:63: [0228/093421:INFO:hostres_plugin_bridge.cc(63)] StatHubCreateHostResPlugin plugin connected
02-28 09:34:21.392: V/chromium(9079): external/chromium/net/http/http_cache.cc:1167: [0228/093421:INFO:http_cache.cc(1167)] HttpCache::OnBackendCreated HostStat created
02-28 09:34:21.392: E/chromium(9079): external/chromium/net/disk_cache/stat_hub.cc:213: [0228/093421:ERROR:stat_hub.cc(213)] StatHub::Init - App org.alfresco.mobile.android.samples isn't supported.
02-28 09:34:21.392: E/chromium(9079): external/chromium/net/disk_cache/stat_hub.cc:213: [0228/093421:ERROR:stat_hub.cc(213)] StatHub::Init - App org.alfresco.mobile.android.samples isn't supported.
02-28 09:34:22.222: D/skia(9079): notifyPluginsOnFrameLoad not postponed

有谁知道我做错了什么?有人有什么建议可以帮助我吗?

感谢您的回答,并为我糟糕的英语感到抱歉。

4

6 回答 6

8

所以我弄清楚我做错了什么。它与加速有关。我只是在我的代码中添加了以下行:

mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

它解决了我的问题。

于 2013-03-14T12:32:39.723 回答
1

我有同样的问题。下面的代码段解决了这个问题

    WebView webView = (WebView) findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);     
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);   
    webView.setWebChromeClient(new WebChromeClient());
    webView.loadUrl(url);
于 2013-11-12T06:05:52.157 回答
0

检查您是否已在 AndroidManifest 文件中包含 INTERNET PERMISSION。

     <uses-permission android:name="android.permission.INTERNET" />
于 2013-02-28T10:34:59.087 回答
0

在看了这篇文章并做了一些其他研究之后,我终于弄清楚了我的问题是什么。我的清单是正确的,我的布局和 webview 设置都是正确的。但是,我传递给 WebViewActivity 类的 URL 格式不正确。差别非常微妙……

我的 URL 以某种方式格式化:

格式:“方案://www.websitename.com//”

示例:“ http://www.awebsite.com//

然而事实证明,有些网站的格式并不完全如此,浏览器的工作就是为您填补空白。例如,您只需在浏览器中输入“google.com”,它就会知道将您带到“ https://www.google.com/ ”。Android WebView 不这样做。

解决方法:访问您尝试在桌面浏览器中加载的网站,并在网站加载后复制 URL。

将其直接粘贴到您的 Java 代码中:

final String websiteURL = "http://awebsite.com//";

请注意,没有“www”。在这个网址上。有些网站需要“www”。有些没有。再次,从您的桌面网络浏览器复制 URL 以确定“www.”是否存在。是需要的。另一个需要注意的是,在这个 URL 的末尾有一个双斜杠“//”。

最重要的是,Android WebView 很挑剔,它要求字符串 URL完全正确,否则它将开始抛出类似这样的错误:

12-16 13:40:26.518: E/chromium(13869): external/chromium/net/disk_cache/stat_hub.cc:216: [1216/134026:ERROR:stat_hub.cc(216)] StatHub::Init - App com.nucitrus.thestory isn't supported.

我希望这有帮助!

于 2013-12-16T14:10:46.460 回答
0

please add

android:hardwareAccelerated="true"

in your webview activity class file. because in android 3.0+ its supports only if we add this line in android manifest file.

于 2013-02-28T12:49:20.733 回答
0

我有同样的问题。但是当我在移动wifi或互联网上时它会修复

于 2016-08-27T22:11:59.787 回答