Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android WebView not stopping after user presses back

I am playing a YouTube video inside a WebView. I am able to play it, but when the person leaves the screen, I am not able to stop the audio from playing.

I tried various things inside onDestroy and onPause, or taking them out entirely, but they didn't seem to make a difference.

Would anyone know why the audio keeps playing and doesn't stop even after the app is turned off and the user opens other apps?

Here is my code for the whole class:

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");     }     } 

Any thoughts on what might stop the audio from playing and what may be causing it? Thank you!

like image 901
Genadinik Avatar asked Oct 08 '13 16:10

Genadinik


People also ask

How do I close WebView on Android?

Add a close button and on its click set: webview. setVisibility(View. INVISIBLE); webview.

When your WebView overrides URL loading it automatically accumulates a history of visited Web pages?

When your WebView overrides URL loading, it automatically accumulates a history of visited web pages. You can navigate backward and forward through the history with goBack() and goForward() . The canGoBack() method returns true if there is actually web page history for the user to visit.

How do I exit WebView?

If you have only 1 activity you can simply start the service and then call finish() on the activity. However, if you have multiple activities you have to make sure that you close them all (see also this post).

How do I turn off Long press in WebView?

1) android:longClickable="false" 2) webView. setLongClickable(false); 3) webView. setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { return true; } });


1 Answers

try this, hope it helps:

@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(); } 
like image 178
Thiago Avatar answered Sep 24 '22 19:09

Thiago