Webビューで再生されているYouTubeビデオを停止するにはどうすればよいですか?戻るボタンをクリックしても、ビデオは停止せず、バックグラウンドで継続します。
コード:
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(false);
webView.getSettings().setSupportZoom(false);
webView.loadData(myUrl,"text/html", "utf-8");
WebViewスレッドが停止しない に関する次の投稿を参照してください
基本的に、独自のアクティビティのonPauseメソッドからWebViewのonPauseメソッドを呼び出す必要があります。
これに関する唯一のトリックは、WebViewのonPauseメソッドが非表示であるため、直接呼び出すことができないことです。したがって、リフレクションを介して間接的に呼び出す必要があります。次のコードを使用すると、独自のアクティビティのonPauseメソッドの設定を開始できます。
@Override
public void onPause() {
super.onPause();
try {
Class.forName("Android.webkit.WebView")
.getMethod("onPause", (Class[]) null)
.invoke(webview, (Object[]) null);
} catch(ClassNotFoundException cnfe) {
...
} catch(NoSuchMethodException nsme) {
...
} catch(InvocationTargetException ite) {
...
} catch (IllegalAccessException iae) {
...
}
}
上記のtryブロックの変数「webview」はクラスのプライベートインスタンス変数であり、アクティビティのonCreateメソッドで割り当てられていることに注意してください。
解決策:1-多くの時間を費やした後、WebView _<iframe>
_ HTMLの概念で遊んでいるビデオの一時停止に結論が出ました。
ActivityまたはFragmentでWebView
を使用した場所でonPause()
メソッドをオーバーライドして呼び出します。わたしにはできる。
_@Override
public void onPause() {
super.onPause();
mWebView.onPause();
}
@Override
public void onResume() {
super.onResume();
mWebView.onResume();
}
_
解決策:2-上記の解決策が機能しない場合は、WebViewに存在しないHTMLファイルを強制的にロードさせることができます。
_mWebview.loadUrl("file:///Android_asset/nonexistent.html");
_
また、onResume()メソッドを実装する必要があります。そうしないと、2回目は機能しません。
@Override
public void onResume()
{
super.onResume();
webView.onResume();
}
@Override
public void onPause()
{
super.onPause();
webView.onPause();
}
上記のソリューションは、サムスンギャラクシーSでAndroid 2.3.3で失敗しました。しかし、私は以下の回避策を試して成功しました:
webview.loadUrl("file:///Android_asset/nonexistent.html");
WebViewに存在しないHTMLファイルを強制的にロードさせています。これは、WebViewを強制的にクリーンアップするようです。
これを試して:
@Override
public void onPause() {
super.onPause();
myWebView.onPause();
myWebView.pauseTimers();
}
@Override
public void onResume() {
super.onResume();
myWebView.resumeTimers();
myWebView.onResume();
}
@Override
protected void onDestroy() {
myWebView.destroy();
myWebView = null;
super.onDestroy();
}
私の個人的なお気に入りは次のとおりです。
@Override
protected void onPause() {
super.onPause();
if (isFinishing()) {
webView.loadUrl("about:blank");
} else {
webView.onPause();
webView.pauseTimers();
}
}
@Override
protected void onResume() {
super.onResume();
webView.resumeTimers();
webView.onResume();
}
ビューが一時停止している場合のみWebViewを一時停止しますが、アクティビティが終了するとWebViewをクリアします。
これには少なくともAndroid 3.0-API 11(Honeycomb)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==event.KEYCODE_BACK)
{
mWebview.loadUrl("");
mWebview.stopLoading();
finish();
}
return super.onKeyDown(keyCode, event);
}
できます
Webview.loadUrl( "about:blank");
それも働いています
この問題に遭遇した後、onPauseは何もしていないように思われます...私にとっては、バックグラウンドで再生されているものを停止していませんでした。
だから私のコードは次のようになります
@Override
protected void onPause() {
mWebView.onPause();
super.onPause();
}
@Override
protected void onResume() {
mWebView.onResume();
super.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
mWebView.saveState(outState);
super.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
mWebView.destroy();
mWebView = null;
super.onDestroy();
}
私と同じ問題を抱えている人に役立つことを願っています
これを試すことができます
webView.loadUrl("javascript:document.location=document.location");
ロード中のページが編集可能なページである場合、オーディオを停止し、好きなように停止したいときに呼び出すjavascriptメソッドを記述できます。
Javascript関数
function stopAudio(){
audios=document.querySelectorAll('audio');
for(i=0;i<audios.length;i++){
audios[i].stop();
}
}
Andoridからこのメソッドを呼び出します
webView.loadUrl("javascript:stopAudio()");
あなたがページを編集できない場合は、jsコードを挿入できます
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
injectScriptFile(view, "js/script.js");
}
これ 私のために働く。
@Override
protected void onPause() {
super.onPause();
if (wViewCampaign != null){
wViewCampaign.stopLoading();
wViewCampaign.loadUrl("");
wViewCampaign.reload();
wViewCampaign = null;
}
}
Activity
のメソッドonPause()
を実行すると、WebViewのメソッドonPause()
を使用して実行できます。
@override
public void onPause() {
super.onPause();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
webview.onPause();
}
}
API >= 11
(Honeycomb
)上記のアプローチは私にとってはうまくいきませんでしたが、私にとってはうまくいきました:
@Override
protected void onPause() {
super.onPause();
((AudioManager)getSystemService(
Context.AUDIO_SERVICE)).requestAudioFocus(
new OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {}
}, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
}
上記のすべての答えを試しましたが、それらのほとんどは私のために機能しません。 WebViewで再生するすべてのタイプのメディアで正常に動作する独自のソリューションを作成するだけです
String lastUrl = "";
@Override
public void onPause() {
super.onPause();
lastUrl = webView.getUrl();
webView.loadUrl("");
}
@Override
protected void onResume() {
super.onResume();
webView.loadUrl(lastUrl);
}
@Override
protected void onDestroy() {
super.onDestroy();
webView = null;
}
これは、このページで提供されているすべてのコードを試した後に最終的に機能したものです。うわ!
@Override
protected void onPause() {
super.onPause();
if (mWebView != null) {
mWebView.stopLoading();
mWebView.reload();
}
}
@Override
protected void onResume() {
super.onResume();
}
私の状況では、プレーヤーはWebViewが「onPause」になった後も実行を続けます。そのため、ビデオや音楽を再生する前に、WebViewがウィンドウに接続されているかどうかを確認します。
これは、WebViewの「isAttachedToWindow()」がtrue/falseを返すことを確認するためのJavaScriptInterfaceメソッドです。
(そして、Activity/FragmentでonPause/onResumeを呼び出すことを忘れませんでした。)