私はこの問題の解決策をたくさん探しましたが、どうやら見つけられませんでした。名前が示すように、私は Webview を持つシンプルな Android アプリを持っています。
public class MainActivity extends Activity {
protected FrameLayout webViewPlaceholder;
protected WebView webView;
final Context myApp = this;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize the UI
initUI();
}
protected void initUI()
{
// Retrieve UI elements
webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder));
// Initialize the WebView if necessary
if (webView == null)
{
// Create the webview
webView = new WebView(this);
webView.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
// Load the URLs inside the WebView, not in the external web browser
webView.setWebViewClient(new WebViewClient());
//webView.setWebChromeClient(new CustomChromeClient(this));
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result)
{
new AlertDialog.Builder(myApp)
.setTitle("javaScript dialog")
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
result.confirm();
}
})
.setCancelable(false)
.create()
.show();
return true;
};
public void onShowCustomView(View view, CustomViewCallback callback){
super.onShowCustomView(view, callback);
Log.i("ChromeCLient", "onshowCustomView");
new AlertDialog.Builder(myApp)
.setTitle("javaScript dialog")
.setMessage("ajbdlsakndsland")
.setCancelable(true)
.create()
.show();
}
@Override
public void onHideCustomView() {
super.onHideCustomView();
Log.i("ChromeCLient", "onhideCustomView");
}
});
webView.getSettings().setJavaScriptEnabled(true);
if (Build.VERSION.SDK_INT < 8) {
webView.getSettings().setPluginsEnabled(true);
} else {
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
}
// Load a page
webView.loadUrl("http://jsbin.com/ijixe4/3");
}
// Attach the WebView to its placeholder
webViewPlaceholder.addView(webView);
}
@Override
public void onConfigurationChanged(Configuration newConfig)
{
if (webView != null)
{
// Remove the WebView from the old placeholder
webViewPlaceholder.removeView(webView);
}
super.onConfigurationChanged(newConfig);
// Load the layout resource for the new configuration
setContentView(R.layout.activity_main);
// Reinitialize the UI
initUI();
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
// Save the state of the WebView
webView.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
// Restore the state of the WebView
webView.restoreState(savedInstanceState);
}
}
私の問題は次のとおりです。webview に読み込まれるサイトは、単純な iframe が埋め込まれた youtube ビデオを含むサイトです。YouTube ビデオでフルスクリーン ボタンを押すと、マニフェストで screenOrientation="portrait" に設定していても、アプリの向きが変更されます。フルスクリーンを終了すると、ビデオの再生中に (バックグラウンドで) 再生が続けられますが、方向の変更により Web ビューが再作成されます。向きが横向きから縦向きになったときに、アクティビティの onDestroy() メソッドで webview を破棄しようとしました。しかし、それは役に立ちませんでした。CustomWebChromeClient を webview に設定して onShowCustomView() メソッドを実装しようとしましたが、HTML5 ビデオを使用しない限り、onShowCustomView() は呼び出されないようです。私'
この問題/バグを解決する他の方法はありますか? HTML5 の video タグはあまり使いたくありません。前もって感謝します。