Youtube 視訊自動播放
阿新 • • 發佈:2019-01-08
最近在做一專案的時候,需要播放Youtube視訊。播放方式大體有三種
1. WebView(我最終用的)
2. Youtube SDK(需要谷歌開發者賬戶)
3. VideoView
其他兩種方式大家自行研究,本篇想說的時候在使用WebView的時候遇到的不能自動播放問題。
注:Demo中使用的是kotlin
首先說一下webview的正常載入Youtube視訊的邏輯
嵌入視訊
- 在計算機上,找到想要嵌入的 YouTube 視訊。
- 在視訊下方,點選分享 。
- 點選嵌入。
- 複製出現的方框中的 HTML 程式碼。
- 將該程式碼貼上到您的部落格或網站 HTML 中
專案中程式碼:
val videohtml = "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/HxHRbxhNZyU?list=PLbuqoK5oI0xKH4exZzZDMOCqpFRi2Ar6E?loop=2&autoplay=1\" frameborder=\"0\" allowfullscreen></iframe>"
但是最終發現始終無法完成自動播放,提示“如果沒有開始自動播放,請重啟終端裝置”。
最終解決方案
但是我最終採用了一個看似暴力的方法,模擬點選,其中故意延遲一秒防止還沒有加載出來。
實現方式如下:
webview.setWebChromeClient(object : WebChromeClient() {
override fun onProgressChanged(view: WebView, newProgress: Int) {
Log.d(TAG, "progress:" + newProgress)
if (newProgress == 100) {
var downTime = SystemClock.uptimeMillis()
downTime += 1000
val downEvent = MotionEvent.obtain(downTime, downTime,
MotionEvent.ACTION_DOWN, view.x + view.width / 2, view.y + view.height / 2, 0)
val upEvent = MotionEvent.obtain(downTime, downTime,
MotionEvent.ACTION_UP, view.x + view.width / 2, view.y + view.height / 2, 0)
view.onTouchEvent(downEvent)
view.onTouchEvent(upEvent)
downEvent.recycle()
upEvent.recycle()
}
super.onProgressChanged(view, newProgress)
}
})