Java android webview youtube嵌入视频自动播放不工作

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

我无法自动播放我的视频,请帮忙。 我的sdk版本

  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();
}

试试这个url
https://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>