gpt4 book ai didi

android - WebView - Youtube 视频在后台播放并最小化

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:44 24 4
gpt4 key购买 nike

我有一个 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() 方法中,并在 Activity 返回时在 onResume 中用户 View 中恢复 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();
}
}

您可能对 onPause 感兴趣和 onResume以及 pauseTimers/resumeTimers WebView 中的方法。

处理方向变化

如果您不希望在旋转屏幕时重新启动 Activity(这将停止重新创建 WebView),那么只需放置

android:configChanges="orientation|screenSize|keyboardHidden|keyboard"

<activity> AndroidManifest 文件中的 Activity 标签。通常这不是一个好的做法,但是当您使用像 WebView 这样的复杂 native View 时,这样做是可以的(Android 网络浏览器使用它来避免在旋转时重新创建)。使用此标签时会发生什么,布局将调整大小以适应横向,您将必须手动处理使用 -port 处理的任何布局特定更改。或 -land资源中的文件夹。如果您只使用一种布局,那么这不是问题。

请参阅this question/answer有关这方面的更多信息,请注意,不鼓励这样做,但它会起作用。

关于android - WebView - Youtube 视频在后台播放并最小化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31788748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com