Java android webview youtube嵌入视频自动播放不工作
我无法自动播放我的视频,请帮忙。 我的sdk版本Java android webview youtube嵌入视频自动播放不工作,java,android,webview,youtube,youtube-javascript-api,Java,Android,Webview,Youtube,Youtube Javascript Api,我无法自动播放我的视频,请帮忙。 我的sdk版本 android:minSdkVersion="14" android:targetSdkVersion="19" /> 我尝试将java脚本放入代码中指定的位置: public void onPageFinished(WebView view, String url) { webView.loadUrl("javascript:(function() { document.getElementsByTagName('vide
android:minSdkVersion="14"
android:targetSdkVersion="19" />
我尝试将java脚本放入代码中指定的位置:
public void onPageFinished(WebView view, String url) { webView.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()"); }
});
我还尝试在URL中附加自动播放,但不起作用
//webView.loadUrl(“http://youtube.com/embed/oY2OxMpCUVY?autoplay=1");代码>
我的网页设置
`
`您不能在webview上使用JavaScript进行自动播放。
为了增强用户体验,WebKit禁用了在移动浏览器上自动播放视频的选项 自动播放问题是一个已知问题,请看我的答案。最后我成功了。。
您需要使用此API播放“OnReady”事件的视频:
加载包含此示例中代码的页面
确保你有
webSettings.setMediaPlaybackRequiresUserGesture(false);
(API 16+)bonnyz在回答中发布的代码的C版本。以防万一有人为了Xamarin需要它:)我测试了它,它工作了。这是我找到的在网络视图中自动播放youtube视频的唯一解决方案
public class MyWebViewClient : WebViewClient
{
WebView webView;
MotionEvent motionEvent, motionEvent2;
public override void OnPageFinished(WebView view, string url)
{
long delta = 100;
long downTime = SystemClock.UptimeMillis();
float x = view.Left + view.Width / 2;
float y = view.Top + view.Height / 2;
webView = view;
motionEvent = MotionEvent.Obtain(downTime, downTime + delta, MotionEventActions.Down, x, y, 0);
motionEvent2 = MotionEvent.Obtain(downTime + delta + 1, downTime + delta * 2, MotionEventActions.Up, x, y, 0);
int delay = 100;
view.PostDelayed(TapDown, delay);
delay += 100;
view.PostDelayed(TapUp, delay);
}
private void TapDown()
{
webView.DispatchTouchEvent(motionEvent);
}
private void TapUp()
{
webView.DispatchTouchEvent(motionEvent2);
}
}
要使用它:
webView.SetWebViewClient(new MyWebViewClient());
受Orsi的启发,我能够在显示视频播放器的WebView中心模拟onClick()事件。这最终会自动播放视频,或者更确切地说,无需用户交互
private class AutoPlayVideoWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// mimic onClick() event on the center of the WebView
long delta = 100;
long downTime = SystemClock.uptimeMillis();
float x = view.getLeft() + (view.getWidth()/2);
float y = view.getTop() + (view.getHeight()/2);
MotionEvent tapDownEvent = MotionEvent.obtain(downTime, downTime + delta, MotionEvent.ACTION_DOWN, x, y, 0);
tapDownEvent.setSource(InputDevice.SOURCE_CLASS_POINTER);
MotionEvent tapUpEvent = MotionEvent.obtain(downTime, downTime + delta + 2, MotionEvent.ACTION_UP, x, y, 0);
tapUpEvent.setSource(InputDevice.SOURCE_CLASS_POINTER);
view.dispatchTouchEvent(tapDownEvent);
view.dispatchTouchEvent(tapUpEvent);
}
}
某处
myWebView.setWebViewClient(new AutoPlayVideoWebViewClient());
首先使用以下代码:
webSettings.setMediaPlaybackRequiresUserGesture(false);
之后,使用以下加载方法:
webView.loadDataWithBaseURL("https://www.youtube.com/", HTML.replace("CUSTOM_ID","YOUR_YOUTUBE_VIDEO_ID"), "text/html", "utf-8", null);
在HTML字符串中使用YouTube API传递以下代码(替换YouTube视频ID)
html,正文{
身高:100%;
宽度:100%;
保证金:0;
填充:0;
背景色:#000000;
溢出:隐藏;
位置:固定;
}
var tag=document.createElement('script');
tag.src=”https://www.youtube.com/player_api";
var firstScriptTag=document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(标记,firstScriptTag);
var播放器;
函数onYouTubePlayerAPIReady(){
player=新的YT.player('player'{
高度:“100%”,
宽度:“100%”,
videoId:“自定义ID”,
活动:{
“onReady”:onPlayerReady,
“onStateChange”:onPlayerStateChange
},
playerVars:{
“自动播放”:0,
“showinfo”:1,
“控件”:1
}
});
}
函数onPlayerReady(事件){
event.target.playVideo();
}
var done=false;
函数onPlayerStateChange(事件){
如果(event.data==YT.PlayerState.PLAYING&&!done){
完成=正确;
}
}
函数stopVideo(){
player.stopVideo();
}
试试这个urlhttps://www.youtube.com/embed/oY2OxMpCUVY?autoplay=1
将www添加到url。我的视频正在运行,但无法自动播放。我尝试了你所说的。。不工作..我怎样才能启用该选项?多亏了这个答案,我设法用Java做了一些关键的调整。看,谢谢。这对我真的很有用。“playerVars”似乎没有必要。酷。所以谷歌提供了一个指南偏好。我从来不知道。
webView.loadDataWithBaseURL("https://www.youtube.com/", HTML.replace("CUSTOM_ID","YOUR_YOUTUBE_VIDEO_ID"), "text/html", "utf-8", null);
<!DOCTYPE html>
<html>
<style type="text/css">
html, body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
background-color: #000000;
overflow: hidden;
position: fixed;
}
</style>
<body>
<div id="player"></div>
<script>
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player('player', {
height: '100%',
width: '100%',
videoId: 'CUSTOM_ID',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
},
playerVars: {
'autoplay': 0,
'showinfo': 1,
'controls': 1
}
});
}
function onPlayerReady(event) {
event.target.playVideo();
}
var done = false;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING && !done) {
done = true;
}
}
function stopVideo() {
player.stopVideo();
}
</script>
</body>
</html>