Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
們做安卓開發時,webview中發現html5 視頻的autoplay根本沒實現,查看了下android 源碼HTMLVideoElement.cpp也未見相應處理,網上有資料顯示,這可能關乎UI線程與后臺線程的協調性,我看,以后的升級版本總會解決這個問題的。
html5標簽屬性不支持,那只有通過javascript來處理了
演示apk下載地址:http://download.csdn.net/detail/qiushi_1990/9513038
github源碼下載:https://github.com/qiushi123/H5Demo
下面是實現步驟和原理
不要忘記了webview.getSettings().settings.setJavaScriptEnabled(true)啟用javascript,AndroidManifest加入INTERNET權限
@Override
public void onPageFinished( WebView view, String url) {
view.loadUrl("javascript:try{autoplay();}catch(e){}");
}
實例代碼
public class Html5VideoAutoPlay extends Activity { WebView webview = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.html5video); webview = (WebView)findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.setWebViewClient(new WebViewClient(){ /** * 當前網頁的鏈接仍在webView中跳轉 */ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } /** * 處理ssl請求 */ @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } /** * 頁面載入完成回調 */ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); view.loadUrl("javascript:try{autoplay();}catch(e){}"); } }); webview.setWebChromeClient(new WebChromeClient() { /** * 顯示自定義視圖,無此方法視頻不能播放 */ @Override public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback); } }); webview.loadUrl("file:///sdcard/html/video.html"); } @Override protected void onPause() { if(null != webview) { webview.onPause(); } super.onPause(); } }
html5video.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
video.html
<body> <video id="video" src="b.mp4" width="480" height="320" controls loop> don't support html5 </video> </body> <script type="text/javascript"> var video = document.getElementById("video"); video.play(); </script>
上面的src可以引入本地視頻b.mp4,
也可以引入網上視頻:http://2449.vod.myqcloud.com/2449_43b6f696980311e59ed467f22794e792.f20.mp4
個人覺得html5結合Android會讓未來各種技術實現越來越簡單。到我的個人博客查看更多h5與安卓的結合案例。
也可以關注我github里的其他開源項目。
github:https://github.com/qiushi123?tab=repositories
實例圖片
效果圖
編程小石頭,為分享干貨而生!據說,每個年輕上進,顏值又高的互聯網人都關注了編程小石頭。?
TML5的標準文件Api可以使用頁面具有文件傳輸的能力,其定義如下四個接口:
BLOB - 不改變變的原始數據。一個Blob類型屬性,顯示數據的媒體類型,如“text /平原”。
File - 繼承自BLOB,表示一個單獨的文件
FileList - 文件對象集合
FileReader - 讀物文件或者BLOB的內容
FileRead提供了三個方法用于讀取文件內容
readAsText() -讀取文件或者BLOB對象將其內容轉換為可讀的文本內容。
readAsDataURL() -取文件或者BLOB對象將其內容轉換為一個Data Url,可用于圖片的現實。
readAsArrayBuffer() - 取文件或者BLOB對象將其內容轉換為ArrayBuffer
FileReader實現一部讀取并且能夠展示讀取內容的進度,可以實現如文件上傳的進度條的接口。
load加載事件-數據已經成功加載
abort終止事件-數據加載過程被終止
error事件-加載過程出錯
loadend事件-加載結束
下面是一個讀物文件內容的實例
采用input type='filed"控件獲取文件或者Blob對象
創建FileReader對象,實現加載過程的控制
FileReader調用readAsText()方法
errror事件實現出錯信息的展示
者:semlinker
轉發鏈接:https://mp.weixin.qq.com/s/tgiHiint3iTfPnr318kuFg
*請認真填寫需求信息,我們會在24小時內與您取得聯系。