webview載入html程式碼(包含播發騰訊視訊的分享程式碼)
阿新 • • 發佈:2019-01-11
騰訊視訊下方的分享點選之後會出現三個不同的分享地址,如圖:,第一個好像是基於falsh的,第二個是基於falsh播放的,由於android4.+不再支援falsh外掛,所以這兩種方式都不能使用,第一種會直接白屏,第二種會顯示外掛無法載入,第三種可以正常使用。
注意:根據網上的資料,好多都說要開啟硬體加速,但是我用已有的手機測試了下,好像沒什麼關係(4.4的和5.0的)?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"); }
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的方法;另外,還需要考慮到橫屏狀態使用者關閉視訊需要回到豎屏狀態。