Android webview 全屏播放视频不起作用

vat*_*ato 4 android webview html5-video

在我的网络视图中,视频无法全屏显示。当我按下 YouTube 视频上的全屏按钮时,chrome 控制台显示以下错误。

Uncaught (in promise) TypeError: fullscreen error
Run Code Online (Sandbox Code Playgroud)

控制台错误

系统

Android 10
Chrome version: 83.0.4103.106
Run Code Online (Sandbox Code Playgroud)

应用程序配置

compileSdkVersion 28
defaultConfig {
    minSdkVersion 22
    targetSdkVersion 28
}

webviewSettings.setJavaScriptEnabled(true);
webviewSettings.setDomStorageEnabled(true);
webviewSettings.setSupportMultipleWindows(false);
webviewSettings.setJavaScriptCanOpenWindowsAutomatically(false);
Run Code Online (Sandbox Code Playgroud)

该错误与此错误Bug 945287相关,但它应该在我的版本中修复。在网络视图中全屏显示嵌入视频是否需要任何其他设置?

Mud*_*ion 7

我找到了一个答案,效果很好Playing HTML5 video on fullscreen in android webview,但对我来说,它在隐藏自定义视图后破坏了键盘。输入文本框不会触发键盘打开。下面的代码是全屏显示并解决我遇到的问题所需的全部内容。

主要活动:

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity
{
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new MyChrome());
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("http://www.google.com");
     }    
private class MyChrome extends WebChromeClient
{
    View fullscreen = null;

    @Override
    public void onHideCustomView()
    {
        fullscreen.setVisibility(View.GONE);
        webView.setVisibility(View.VISIBLE);
    }
    @Override
    public void onShowCustomView(View view, CustomViewCallback callback)
    {
        webView.setVisibility(View.GONE);

        if(fullscreen != null)
        {
            ((FrameLayout)getWindow().getDecorView()).removeView(fullscreen);
        }

        fullscreen = view;
        ((FrameLayout)getWindow().getDecorView()).addView(fullscreen, new FrameLayout.LayoutParams(-1, -1));
        fullscreen.setVisibility(View.VISIBLE);
    }
}
Run Code Online (Sandbox Code Playgroud)

Android清单

<activity
  android:name=".MainActivity"
  android:configChanges="orientation|screenSize" />
Run Code Online (Sandbox Code Playgroud)