WebView içinde video gömülü video bağlantılarına (ex: https://www.youtube.com/embed/dQw4w9WgXcQ) tam bir çalışma düğmesi olması için WebChromeClient alt sınıfını uygulamaya çalışıyorum.WebView içindeki Videonun tam ekran düğmesi çalışmıyor
VideoWebChromeClient:
public class VideoWebChromeClient extends WebChromeClient {
private boolean isVideoFullscreen = false;
private View activityNonVideoView;
private ViewGroup activityVideoView;
private View videoViewContainer;
private CustomViewCallback videoCallback;
private Window videoWindow;
public VideoWebChromeClient(View activityNonVideoView, ViewGroup activityVideoView, Window window) {
this.activityNonVideoView = activityNonVideoView;
this.activityVideoView = activityVideoView;
this.videoWindow = window;
}
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
Log.w("ENTER FULLSCREEN");
videoCallback = callback;
videoViewContainer = view;
videoWindow.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
activityNonVideoView.setVisibility(View.GONE);
activityVideoView.addView(videoViewContainer, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
activityVideoView.setVisibility(View.VISIBLE);
isVideoFullscreen = true;
}
@Override
public void onHideCustomView() {
if (!isVideoFullscreen) {
return;
}
Log.w("EXIT FULLSCREEN");
activityVideoView.setVisibility(View.GONE);
activityVideoView.removeView(videoViewContainer);
activityNonVideoView.setVisibility(View.VISIBLE);
videoWindow.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
videoViewContainer = null;
videoCallback.onCustomViewHidden();
isVideoFullscreen = false;
}
public boolean onBackPressed() {
onHideCustomView();
return isVideoFullscreen;
}
}
WebViewActivity
public class WebViewActivity extends BaseActivity {
public static final String WEB_VIEW_URL_EXTRA = "URL";
private boolean loadedFirstURL = true;
private VideoWebChromeClient mWebChromeClient;
@Bind(webview)
WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(provideLayoutId());
String url = (String) getIntent().getSerializableExtra(WEB_VIEW_URL_EXTRA);
// Check if URL is YouTube/Vimeo
if (RegexHelper.isVideoURL(url)){
// Allow Fullscreen
final View defaultLayout = findViewById(R.id.defaultLayout);
final View fullscreenLayout = findViewById(R.id.fullscreenLayout);
mWebChromeClient = new VideoWebChromeClient(defaultLayout, (ViewGroup) fullscreenLayout, getWindow());
mWebView.setWebChromeClient(mWebChromeClient);
// Block external links
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (loadedFirstURL) {
loadedFirstURL = false;
return false;
}
return true;
}
});
}
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(url);
}
@Override
public void onBackPressed() {
if (!mWebChromeClient.onBackPressed())
{
if (mWebView.canGoBack()) {
mWebView.goBack();
}
else {
super.onBackPressed();
}
}
}
}
Bu doğru KitKat b çalışır
Ben this repo temelde basitleştirilmiş, burada bazı parçacıkları şunlardır Nougat'da (yalnızca test edilecek iki cihazım var): tam ekran düğmesine dokunduğumda bazen tam ekrana geçiyor, ancak çoğu zaman "yanıp sönüyor" ve tam ekran kullanılmıyor.
Ve tam ekran modunda aslında olduğunda sonra, Tam ekrandan çıkmak için düğmesi çalışmıyor
Ben günlükleri koymak olduğunu görebilirsiniz (onHideCustomView
hiç çağrılmaz) ve fark zaman "flaş" olur, onHideCustomView
aslında doğru olarak adlandırılır onShowCustomView
("ENTER FULLSCREEN"
sonra hemen "EXIT FULLSCREEN"
), neden anlamıyorum.
Çok teşekkürler herkes bir solüsyon
Sadece deneyimlerime ve araştırmamıza dayanan bir fikir: youtube videolarıyla başa çıkmak için web sayfasını unutun: uygun Youtube API'sini kullanmak her haftaki şaşırtıcı güncellemeden kurtulacak. – statosdotcom
@statosdotcom yes Ben bunu sadece YouTube uygulamasında açabilmeyi isterdim ancak amacım sadece bir video görüntülemekten ve başkalarını önermekten kaçınmaktan yana olamam. – CyrilFind
Belki de API sizin için bazı yapılandırmalar sunabilir ve bazı ince ayarlara izin verebilir. Sanırım ona bir göz atmalısın. İyi şanslar. – statosdotcom