2

alfresco android sdk に基づくアプリケーションがあります。ユーザーがサーバーにログインすると、MainActivity が開始されます。MainActivity 自体にはフラグメントがほとんどありません。1 つのフラグメントには、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 ビデオを含むページが表示されることがわかりました。これは、私が試したすべての URL で発生します。

テスト アクティビティでは、同じレイアウトを使用し、ビデオを含むページが読み込まれ、正しく表示されます。

フラグメントとテスト アクティビティでは、webview の設定と URL の読み込みに同じコードを使用します。Javascript が有効になっており、WebView のドキュメントで推奨されているように WebChromeClient を使用しています。また、アプリケーション マニフェストで 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

この投稿を見て、他の調査を行った後、私は最終的に私の問題が何であるかを理解しました. 私のマニフェストは正しかったし、レイアウトと Web ビューの設定もすべて正しかった。しかし、WebViewActivity クラスに渡した URL の形式が正しくありませんでした。違いは非常に微妙です...

URL を特定の方法でフォーマットしました。

形式: "scheme://www.websitename.com//"

例: " http://www.awebsite.com// "

ただし、一部の Web サイトはこのように正確にフォーマットされておらず、ブラウザーの仕事はユーザーに代わって空白を埋めることです。たとえば、ブラウザに「google.com」と入力するだけで、「https://www.google.com/」に移動することがわかります。Android WebView はこれを行いません。

修正: デスクトップ ブラウザーで読み込もうとしている Web サイトにアクセスし、Web サイトが読み込まれた後に URL をコピーします。

Java コードに直接貼り付けます。

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

「www」がないことに注意してください。この URL で。一部の Web サイトには「www.」が必要です。そうでない人もいます。繰り返しますが、デスクトップ Web ブラウザから URL をコピーして、「www.」が必要です。もう 1 つの注意点は、この 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

追加してください

android:hardwareAccelerated="true"

あなたのwebviewアクティビティクラスファイルで。Android 3.0+ では、この行を Android マニフェスト ファイルに追加した場合にのみサポートされるためです。

于 2013-02-28T12:49:20.733 に答える
0

AndroidManifest ファイルに INTERNET PERMISSION が含まれていることを確認します。

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