我有一个WebView的问题,基本上我正在一个在地方嵌入视频的论坛中加载,如果你播放一个视频然后旋转设备,视频在后台继续播放,你可以到达它来阻止它.最小化应用程序时也会发生这种情况.有办法阻止这个吗?
这是我正在使用的WebView代码.
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.view = (WebView) findViewById(R.id.webView);
view.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && url.contains("grcade")) {
view.loadUrl(url);
view.getSettings().setJavaScriptEnabled(true);
return true;
} else {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
}
});
view.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
if(savedInstanceState == null){
String url = "http://grcade.co.uk";
view.getSettings().setJavaScriptEnabled(true);
view.loadUrl(url);
view.getSettings().setSupportZoom(true);
view.getSettings().setBuiltInZoomControls(true);
view.getSettings().setDisplayZoomControls(false);
view.getSettings().setLoadWithOverviewMode(true);
view.setBackgroundColor(Color.WHITE);
}
final SwipeRefreshLayout pulltoRefresh = (SwipeRefreshLayout) findViewById(R.id.pullToRefresh);
pulltoRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
view.reload();
pulltoRefresh.setRefreshing(false);
}
});
}
@Override
public void onSaveInstanceState (Bundle outState)
{
super.onSaveInstanceState(outState);
view.saveState(outState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
view.restoreState(savedInstanceState);
view.getSettings().setJavaScriptEnabled(true);
}
//Main WebView Panel End
任何帮助将被欣赏,因为我很困惑,我停止它回来但是相同的方法不会工作因为添加它导致应用程序恢复到默认的webview URL而不是重新加载用户所在的页面.
谢谢.
解决方法:
暂停/恢复视频
执行此操作的简单方法是在您希望视频停止播放时(即应用程序进入后台时)暂停WebView.这只需通过以下代码完成:
WebView view = (WebView) findViewById(R.id.webView);
view.onPause(); // This will pause videos and needs to be called for EVERY WebView you create
view.pauseTimers(); // This will pause JavaScript and layout for ALL WebViews and only needs to be called once to affect all WebViews
处理此逻辑的最佳位置是将暂停代码放在Activity的onPause()方法中,并在onResume中为用户查看活动时恢复WebView:
WebView mWebView; // Initialize this somewhere
@Override
protected void onPause(){
super.onPause();
if(mWebView != null){
mWebView.onPause();
mWebView.pauseTimers();
}
}
@Override
protected void onResume(){
super.onResume();
if(mWebView != null){
mWebView.onResume();
mWebView.resumeTimers();
}
}
您可能对WebView中的onPause和onResume以及pauseTimers/resumeTimers方法感兴趣.
处理方向变更
如果您不希望在旋转屏幕时重新启动Activity(这将阻止重新创建WebView),那么就放好
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
在< activity>中您的AndroidManifest文件中的Activity标记.这通常不是一个好习惯,但是当您使用像WebView这样的复杂本机视图时,可以这样做(Android Web浏览器使用它来避免在旋转时重新创建).使用此标记时会发生的情况是,只需调整布局大小以适应横向,您必须手动处理资源中使用-port或-land文件夹处理的任何特定于布局的更改.如果您只使用一个布局,那么这不是问题.
有关详细信息,请参阅this question/answer,并注意不鼓励它,但它会起作用.