Поворот экрана при воспроизведении видео HTML5 в полноэкранном режиме
Прежде всего, я хотел бы извиниться за мой плохой уровень в английском, и за все ошибки, которые я мог сделать в этом посте. Я также "младший" в разработке Android (я делаю это в свое свободное время), я не очень хорош и достаточно опытен, пока ^^ так что извините, если у меня могут быть некоторые трудности, чтобы понять ответ, который вы могли бы дать мне,
Так что я делаю? Я создаю простое приложение для Android. Это просто Webview для загрузки моего сайта. Мой сайт просто случайный видеоплеер Youtube.
Сначала я столкнулся с проблемой воспроизведения HTML5-видео в полноэкранном режиме. Мне удалось сделать это с этим проектом VideoEnabledWebView
Так что мое приложение точно такое же, как VideoEnabledWebView.
В чем моя проблема? Я блокирую поворот экрана в моем приложении. Только режим "Портрет", и мне это удалось. Но когда я играю видео в полноэкранном режиме, я не могу быть в альбомном режиме. Я понимаю почему, но я не могу найти решение, взломать, чтобы сделать это. Поэтому я хотел бы повернуть экран в альбомном режиме, только если я играю видео в полноэкранном режиме.
Во-первых, вот мой MainActivity.java:
public class MainActivity extends ActionBarActivity
{
private VideoEnabledWebView webView;
private VideoEnabledWebChromeClient webChromeClient;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
webView = (VideoEnabledWebView)findViewById(R.id.webView);
View nonVideoLayout = findViewById(R.id.nonVideoLayout); // Your own view, read class comments
ViewGroup videoLayout = (ViewGroup)findViewById(R.id.videoLayout);
View loadingView = getLayoutInflater().inflate(R.layout.view_loading_video, null); // Your own view, read class comments
webChromeClient = new VideoEnabledWebChromeClient(nonVideoLayout, videoLayout, loadingView, webView) // See all available constructors...
{
@Override
public void onProgressChanged(WebView view, int progress)
{
}
};
webChromeClient.setOnToggledFullscreen(new VideoEnabledWebChromeClient.ToggledFullscreenCallback()
{
@Override
public void toggledFullscreen(boolean fullscreen)
{
if (fullscreen)
{
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(attrs);
if (android.os.Build.VERSION.SDK_INT >= 14)
{
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
}
}
else
{
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(attrs);
if (android.os.Build.VERSION.SDK_INT >= 14)
{
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}
}
});
webView.setWebChromeClient(webChromeClient);
webView.setWebViewClient(new myWebViewClient());
webView.loadUrl("https://www.awesomekraken.com/fr");
}
public class myWebViewClient extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
}
@Override
public void onBackPressed()
{
if (!webChromeClient.onBackPressed())
{
if (webView.canGoBack())
{
webView.goBack();
}
else
{
super.onBackPressed();
}
}
}
}
Как вы можете видеть в методе onCreate, я поставил строку:
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Я думаю, что в этой части я могу решить мою проблему:
webChromeClient.setOnToggledFullscreen(new VideoEnabledWebChromeClient.ToggledFullscreenCallback()
{
@Override
public void toggledFullscreen(boolean fullscreen)
{
if (fullscreen)
{
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(attrs);
if (android.os.Build.VERSION.SDK_INT >= 14)
{
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
}
}
else
{
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
attrs.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(attrs);
if (android.os.Build.VERSION.SDK_INT >= 14)
{
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}
}
});
Я пытался поставить setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
под if(полноэкранный режим), но это не работает. Приложение переключается в альбомный режим на полсекунды, а веб-просмотр перезагружает всю страницу.
Я много искал в Google и Stackru, но теперь я не нашел ничего очень полезного.
Только этот пост такой же, как мой, но он не получил никакого ответа.
Если у кого-то есть решение, совет или совет...
Конечно, я обновлю этот пост, если получу больше информации или решу свою проблему.
Заранее спасибо за помощь!
1 ответ
Я закончил вращением контейнера пользовательского вида:
public class RotatedVerticalFrameLayout extends FrameLayout{
public RotatedVerticalFrameLayout(Context context, AttributeSet attrs){
super(context, attrs);
}
@SuppressWarnings("SuspiciousNameCombination")
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
super.onMeasure(heightMeasureSpec, widthMeasureSpec);
int w = getWidth();
int h = getHeight();
setRotation(90.0f);
setTranslationX((h - w) / 2);
setTranslationY((w - h) / 2);
ViewGroup.LayoutParams lp = getLayoutParams();
lp.height = w;
lp.width = h;
requestLayout();
}
}
Это похоже на альбомный режим, если вы показываете только пользовательский вид вместо панели действий и другого содержимого.