Короткая версия: Для воспроизведения видео на YouTube я использую такой WebView,
webView.loadData("<style> body{margin:0; background-color:black;}div{width:100%; height:100%; background-color:black}iframe{ width:100%; height:100%; border:none; overflow:hidden; }</style><div><iframe src=\"http://www.youtube-nocookie.com/embed/4eO9SS3wvLY?autoplay=1&rel=0&app=youtube_gdata&fs=1" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" webkitallowfullscreen=\"webkitallowfullscreen\"></iframe></div>", "text/html", "utf-8");
Все работает нормально, за исключением того, что при нажатии на значок [], чтобы перевести видео в полноэкранный режим, он показывает черный экран с первой, второй и третьей попытки. С четвертой попытки чаще всего он правильно показывает видео в полноэкранном режиме. Однако это не всегда так.
Примечание: Для видео в Twitter и Facebook переход на полноэкранный режим работает, как и ожидалось.
Длинная версия:
Код, который я использую для достижения этой цели,
public class Test1Activity extends AppCompatActivity {
ViewGroup rootView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test1);
rootView = findViewById(R.id.container);
WebView webView = findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient() {
private View viewTakingFullScreen;
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
//Log.d(TAG, "onShowCustomView(View:" + view + ", CustomViewCallback:" + callback + ")");
super.onShowCustomView(view, callback);
if (view instanceof FrameLayout) {
// a video wants to be shown fullscreen
viewTakingFullScreen = view;
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(attrs);
rootView.addView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}
}
@Override
public void onHideCustomView() {
//Log.d(TAG, "onHideCustomView()");
super.onHideCustomView();
if (viewTakingFullScreen != null) {
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(attrs);
int index = rootView.indexOfChild(viewTakingFullScreen);
rootView.removeViewAt(index);
viewTakingFullScreen = null;
}
}
});
String htmlContent = "<style> body{margin:0; background-color:black;}div{width:100%; height:100%; background-color:black}iframe{ width:100%; height:100%; border:none; overflow:hidden; }</style><div><iframe src=\"http://www.youtube-nocookie.com/embed/4eO9SS3wvLY?autoplay=1&rel=0&app=youtube_gdata&fs=1\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" webkitallowfullscreen=\"webkitallowfullscreen\"></iframe></div>";
webView.loadData(htmlContent, "text/html", "utf-8");
//webView.loadUrl("http://www.youtube-nocookie.com/embed/4eO9SS3wvLY?autoplay=1&rel=0&app=youtube_gdata&fs=1");
}
}
Это файл макета (activity_test1.xml), который я использую,
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Top Button" />
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="450dp">
</WebView>
</LinearLayout>
</FrameLayout>
Я пытался отладить это уже два дня, но тщетно. Я чувствую, что проблема может быть связана с использованием проигрывателя YouTube для встраивания внутри тега <iframe>
. Но я не вижу никаких признаков ошибки в журналах.
Также я использую <iframe>
для воспроизведения видео в Twitter и Facebook. Но у видео в Твиттере есть тег <video>
, а у видео в Фейсбуке есть свой собственный проигрыватель для вставки (https://www.facebook.com/video/embed?video_id={id}). В полноэкранном режиме они работают нормально.