1. 程式人生 > >webview載入html程式碼(包含播發騰訊視訊的分享程式碼)

webview載入html程式碼(包含播發騰訊視訊的分享程式碼)

騰訊視訊下方的分享點選之後會出現三個不同的分享地址,如圖:,第一個好像是基於falsh的,第二個是基於falsh播放的,由於android4.+不再支援falsh外掛,所以這兩種方式都不能使用,第一種會直接白屏,第二種會顯示外掛無法載入,第三種可以正常使用。

 webView = (WebView) findViewById(R.id.webview);
        /**/
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            webView.getSettings().setMixedContentMode(
                    WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);

        }
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedSslError(WebView view,
                                           SslErrorHandler handler, SslError error) {
                // TODO Auto-generated method stub
                // handler.cancel();// Android預設的處理方式
                handler.proceed();// 接受所有網站的證書
            }
        });
//注意,4.+不在支援flash,不能使用embed標籤了
        String html1 = "<iframe frameborder=\"0\" width=\"1080\" height=\"1000\" src=\"https://v.qq.com/iframe/player.html?vid=g0024gbjoue&tiny=0&auto=0\" allowfullscreen></iframe>";
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setPluginState(WebSettings.PluginState.ON);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setDefaultTextEncodingName("UTF-8");
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setDomStorageEnabled(true);
        String content = "<p><font color='red'>hello world!</font></p>";
        //載入普通的html程式碼
        //webView.loadData(content, "text/html", "UTF-8");
        //載入視訊連線
        //  webView.loadUrl("http://player.youku.com/embed/XNTM5MTUwNDA0");
        //載入asset下的html程式碼
        //webView.loadUrl("file:///android_asset/test.html");
       //載入html視訊程式碼
         webView.loadData(html1, "text/html", "UTF-8");

    }
注意:根據網上的資料,好多都說要開啟硬體加速,但是我用已有的手機測試了下,好像沒什麼關係(4.4的和5.0的)?

  android:hardwareAccelerated="true"

對於載入assets下的html,

  位置是project-專案名字-app-main;在這個下面新建assets資料夾,不是在res,切記。測試的html程式碼如下,裡面的連結可能失效,去騰訊視訊再哪一個就行了


<!doctype html>
<html lang="zh-hans">
<head>
    <meta charset="UTF-8">
    <title>JavaScript</title>
</head>
<body>
<h1>標題</h1>
<iframe frameborder="0" width="640" height="498"
        src="https://v.qq.com/iframe/player.html?vid=k0531d46jwe&tiny=0&auto=0"
        allowfullscreen></iframe>

</body>
</html>


重要補充:20170810

對於webview.loadUrl();,如果你需要播放分享的地址,那麼就不能傳入帶html標籤的那一整段程式碼,因為那一段程式碼中包含寬度和高度,這樣的話當你使用事會發現,不管你怎麼調整webview的寬高都無濟於事。所以,在傳入的時候,只傳入那個視訊的地址。

對於視訊的全屏監聽:開啟地址後會發現,點選暫停和播放好用,但是全屏就不好用了。這裡有兩種解決辦法:

1.在webview右下角蒙一層透明的佈局,點選之後去觸發全屏的方法。(這個方法尤其對於當webview時recycleview的item,點選需要放大好用。當然,你要是想去監聽暫停、全屏等等也不是沒有辦法

2.第一種是一個投機取巧的方法,第二個就是真的方法了。參照如下博主的:http://blog.csdn.net/lx331675996/article/details/50634670,就可以實現了。

說了監聽全屏,那對於全屏實現呢

1.首先,豎屏的時候,就是正常的大小,不需要做操作;放大的時候,既是全屏的時候,需要手機橫屏,對於橫豎屏切換會引發生命週期的改變,不做贅述。去activity節點下設定

android:configChanges="keyboardHidden|orientation|screenSize"
設定了之後,對於橫豎屏的切換,只會走onConfigChanged()方法,如果是activity,就去拿到layoutPr...重新設定寬高。如果是webview在dialog裡面,雖然也可以去設定dialog
的寬高,但是好像有問題?反正,我這樣設定是有問題的,解決辦法就是去onConfigChange中重新寫彈出dialog的方法;另外,還需要考慮到橫屏狀態使用者關閉視訊需要回到豎屏狀態。