首先,我想为我糟糕的英语水平以及我在这篇文章中可能犯的所有错误道歉。
我也是 Android 开发中的“初级”人员(我是在空闲时间做这件事的),我还不够优秀,经验还不够^^ 如果我在理解你可能给我的答案时可能遇到一些困难,那么抱歉。
那我在做什么?
我正在创建一个简单的 Android 应用程序。它只是一个加载我的网站的 Webview。
我的网站只是一个随机的 YouTube 视频播放器。
首先,我在全屏播放 HTML5 视频时遇到问题。我通过这个项目成功做到了这一点视频启用WebView https://github.com/cprcrack/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(fullscreen) 下,但这不起作用。应用程序在横向模式下切换半秒,然后 Web 视图重新加载所有页面。
我在 Google 和 StackOverflow 上搜索了很多,但从现在开始我没有发现任何有用的东西。
只有这个post https://stackoverflow.com/questions/23802968/android-html5-video-fullscreen-and-rotation和我的一样,但他没有得到任何答复。
如果有人有解决方案、提示或建议......
当然,如果我获得更多信息或解决我的问题,我会更新这篇文章。
在此先感谢您的帮助 !