WebView内でYouTubeビデオを再生しています。私はそれを再生することはできますが、その人が画面を離れたとき、オーディオの再生を停止することはできません。
OnDestroyとonPauseでさまざまなことを試したり、それらを完全に取り出したりしましたが、違いは見られませんでした。
アプリの電源をオフにしてユーザーが他のアプリを開いた後でも、オーディオが再生され続け、停止しない理由を誰もが知っていますか?
これがクラス全体の私のコードです:
import com.flurry.Android.FlurryAgent;
import utils.SendEmail;
import Android.app.Activity;
import Android.app.AlertDialog;
import Android.content.Context;
import Android.content.DialogInterface;
import Android.content.Intent;
import Android.content.SharedPreferences;
import Android.os.Bundle;
import Android.preference.PreferenceManager;
import Android.view.KeyEvent;
import Android.view.View;
import Android.webkit.WebChromeClient;
import Android.webkit.WebSettings;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;
import Android.webkit.WebSettings.PluginState;
import Android.widget.Button;
public class YoutubeActivity extends Activity
{
WebView webview = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
webview = new WebView(this);
setContentView(webview);
webview.getSettings().setAppCacheEnabled(false);
webview.getSettings().setJavaScriptEnabled(true);
webview.setInitialScale(1);
webview.getSettings().setPluginState(PluginState.ON);
WebSettings webSettings = webview.getSettings();
webSettings.setLoadsImagesAutomatically(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setUseWideViewPort(true);
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
});
webview.setWebChromeClient(new WebChromeClient(){});
webSettings.setDomStorageEnabled(true);
webSettings.setAppCacheEnabled(true);
webSettings.setAppCachePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/cache");
webSettings.setDatabaseEnabled(true);
webSettings.setDatabasePath(getApplicationContext().getFilesDir().getAbsolutePath() + "/databases");
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences( YoutubeActivity.this);
String url_to_watch = prefs.getString( "url_to_watch" , null );
webview.loadUrl(url_to_watch);
}
@Override
public void onPause()
{
super.onPause();
try
{
if ( webview != null )
{
webview.clearCache(true);
webview.getSettings().setAppCacheEnabled(false);
webview.stopLoading();
webview.destroy();
sendEmail ("in pause " , "");
webview = new WebView(this);
}
this.finish();
}
catch ( Exception e )
{
}
}
@Override
public void onDestroy()
{
super.onDestroy();
try
{
if ( webview != null )
{
webview = new WebView(this); // To try to reset the webview - didn't work.
}
}
catch ( Exception e )
{
}
}
@Override
public void onStop()
{
super.onStop();
FlurryAgent.onEndSession(this);
try
{
if ( webview != null )
{
webview.clearView();
webview.getSettings().setAppCacheEnabled(false);
webview.stopLoading();
webview.destroy();
sendEmail ("in stop " , "");
}
}
catch ( Exception e )
{
}
this.finish();
}
@Override
protected void onResume()
{
super.onResume();
try
{
webview.onResume();
}
catch ( Exception e )
{
}
}
@Override
protected void onRestart()
{
super.onRestart();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack())
{
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
// Subject , body
public void sendEmail( String subject , String body )
{
String[] params = new String[] { "http://www.problemio.com/problems/send_email_mobile.php", subject, body };
SendEmail task = new SendEmail();
task.execute(params);
}
//@Override
public void onPageFinished(WebView view, String url)
{
//super.onPageFinished(view, url);
view.clearCache(true);
}
public void onBackPressed ( )
{
final AlertDialog.Builder linkedin_builder = new AlertDialog.Builder(this);
linkedin_builder.setMessage("" +
"Go back to the home screen?")
.setCancelable(false)
.setNegativeButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id)
{
if ( webview != null )
{
webview.destroy();
}
Intent myIntent = new Intent(YoutubeActivity.this, MainActivity.class);
YoutubeActivity.this.startActivity(myIntent);
}
})
.setPositiveButton("NO", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id)
{
dialog.cancel();
}
})
;
AlertDialog alert = linkedin_builder.create();
alert.show();
}
@Override
protected void onStart()
{
super.onStart();
FlurryAgent.onStartSession(this, "4VYNFK3V6RCZ53CZ3J32");
}
}
オーディオの再生が停止する可能性のある原因、および原因となる原因についての考えはありますか?ありがとうございました!
これを試して、それが役立つことを願って:
@Override
public void onPause() {
myWebView.onPause();
myWebView.pauseTimers();
super.onPause();
}
@Override
public void onResume() {
super.onResume();
myWebView.resumeTimers();
myWebView.onResume();
}
@Override
protected void onDestroy() {
myWebView.destroy();
myWebView = null;
super.onDestroy();
}
呼び出す必要があります:
webView.loadUrl("about:blank");
Javasriptオブジェクトだけでなくすべてのオーディオ/ビデオを破壊し、webviewで実行中のすべての機能を停止します
https://stackoverflow.com/a/17690221/3032209 から取得:
アクティビティのonPause()およびonResume()からそれぞれWebViewのonPause()およびonResume()を呼び出す必要があります。
このWebViewおよび関連するDOM、プラグイン、JavaScriptなどに関連する追加の処理を一時停止します。たとえば、このWebViewが画面外に表示される場合、これを呼び出して不必要なCPUまたはネットワークトラフィックを削減できます。このWebViewが再び「アクティブ」になったら、onResume()を呼び出します。
一部またはすべてのデバイスで何も機能しませんでした。これは私が推測する正確な解決策です。私のために働いた。
Android webview? でのYouTube動画の再生を停止する方法
あるいは、API> = 11の場合、_webview.onPause();を使用できます。アクティビティの/フラグメントのonPause
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
_webview.onPause();
}
アクティビティのonDestroy()
do:
@Override
protected void onDestroy() {
super.onDestroy();
webView.destroy();
}
Activity
のメソッドonPause()
を使用して実行できます。
@override
public void onPause() {
super.onPause();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
webview.onPause();
}
}
aPI> = 11(Honeycomb)で使用するための検証の追加